2017-05-25 62 views
0

我只是想在C/JS的计划有所帮助找到完美立方使用的关注分解方法的任何帮助,将appricated程序,找出完美的立方体通过分解

  • 3 * 3 * 3
  • 3 * 3 * 3
  • 3 * 3 * 3

代码

var num=19683; 
    var arr=[]; 
    for(i=2;i<num;i++){ 
    if(num%i==0){ 
    arr.push(i); 
    } 
} 

C代码

#include<stdio.h> 

int main() { 
    int num=19683; 
    int a[20]; 
    int j=0; 
    for(int i=2;i<num;i++){ 
    if(num%i==0){ 
     a[j]=i; 
     j++; 

    } 

    } 
    for(int i=0;i<j;i++){ 
    printf(" %i", a[i]); 
    } 
} 

得到结果:作为

1,3,9,27,81,243,729,2187,6561

+1

请选择一种语言 –

+0

您似乎已经在js ..中编码,那么为什么要标记C? –

+1

@BLUEPIXY然后条件将是错误的。没问题, –

回答

0

虽然期望的结果是不清楚, 是这样的事情?

var num=1881365963625; 
 
var arr=[]; 
 
var find = "yes"; 
 
for(var i = 2; i < num; i++){ 
 
    var count = 0; 
 
    while(num % i==0){ 
 
    num /= i; 
 
    ++count; 
 
    } 
 
    if(count % 3 != 0){ 
 
    find = "no"; 
 
    break; 
 
    } else if(count != 0){ 
 
    arr.push([i, count]); 
 
    } 
 
} 
 
console.log(find); 
 
if(find == "yes") 
 
    console.log(arr);

0

如果你想知道输入的号码是否是完美的立方体或不

var num = 19683, c=0; 
    for(var i=1; i<=num; i++){ 
     if((num%i===0)&&(i*i*i === num)){ 
     c = c+1; 
     } 
    } 
    if(c > 0) { 
    console.log('Yes') 
    } else console.log('No'); 

可能是这可能会花费更少的时间

var num = 100000000, c=0, arr=[]; 
for(var i=1; i<(num/2)+1; i++){ 
    if(num%i===0){ 

    arr.push(i); 
    } 
} 
for(var i=0; i< arr.length; i++) { 
    var x = arr[i]; 
    if(x*x*x === num) c = c+1; 
} 
if(c > 0) { 
console.log('Yes') 
} else console.log('No') 
+0

是否可行如86821047424之类的任何号码是否可行 以上会运行良好为10000000,直到这个数字,但之后不起作用 –

+0

它会工作,但循环迭代需要时间 –

1

未经测试的快C解决方案:

int isPerfectCube(long int num){ 
    long int x = pow(num, 1.0/3) + 0.5; 
    return (x*x*x == num); 
} 

该解决方案的缺点是它依赖于浮点运算。优点是它很快(未经测试,但应该是真实的)并且易于实现,并且将繁重的工作传递给pow(),这可能反复地处理这种情况。

对于pow(num, 1.0/3)的准确性的最低要求是它至少比正确的整数更接近于其他任何整数,而当num实际上是一个完美的立方体。否则算法将失败(这就是为什么浮点精度对这类问题不利)。 + 0.5将确保从doubleint截至最接近的整数。如果你想使用这个解决方案,你可能想要检查哪个范围的数字pow()足够准确。

一个更安全,甚至更快的解决方案可能会涉及到自己做一些迭代算法。这就是我想要做的。