2017-05-25 58 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()足夠準確。

一個更安全,甚至更快的解決方案可能會涉及到自己做一些迭代算法。這就是我想要做的。