題目描述:輸入n個整數,依次輸出每個數的約數的個數
輸入:輸入的第一行為n,即陣列的個數(n<=1000)
接下來的1行包括n個整數,其中每個數的範圍為(1<=num<=1000000000)
當n=0時輸入結束。
輸出:可能有多組輸入資料,對於每組輸入資料,
輸出n行,其中每一行對應上面的乙個數的約數的個數。
樣例輸入:
5樣例輸出:1 3 4 6 12
123這個題目呢,大家可以對比一下以下不同的做法。46
**一:九度oj測試結果耗時290ms。
1/*2**二:耗時間1000ms* main.c3*
4* created on: 2023年1月15日
5* author: shaobo6*/
7 #include 8 #include 9 #include 10
11int main(void)29
}30 tmp = (int)(sqrt(data[i]*1.0
));31
if (tmp * tmp ==data[i])
32 --cnt;
33 printf("
%d\n
", cnt);34}
35free
(data);36}
37return0;
38 }
1**三:耗時20msint main(void)2
23 cnt = cnt*(t+1
);24
}25 printf("
%d\n
", cnt);26}
27}28return0;
29 }
1關於**int main(void)2
23 cnt = cnt*(t+1
);24}25
if(num>1) cnt=cnt*2
;26 printf("
%d\n
", cnt);27}
28}29return0;
30 }
二、三的原理,請看下面這個數學題:
**二耗時較大的原因,我想應該是這樣:
當num是乙個比較大的質數時, while(num % j==0)的時間複雜度會退化到o(x)。採用類似**一或**三的借助sqrt的優化後,時間複雜度是o(sqrt(x))。
九度oj 題目1087 約數的個數
鏈結 題目描述 輸入n個整數,依次輸出每個數的約數的個數 輸入 輸入的第一行為n,即陣列的個數 n 1000 接下來的1行包括n個整數,其中每個數的範圍為 1 num 1000000000 當n 0時輸入結束。輸出 可能有多組輸入資料,對於每組輸入資料,輸出n行,其中每一行對應上面的乙個數的約數的個...
九度OJ 題目1087 約數的個數
題目描述 輸入n個整數,依次輸出每個數的約數的個數 輸入 輸入的第一行為n,即陣列的個數 n 1000 接下來的1行包括n個整數,其中每個數的範圍為 1 num 1000000000 當n 0時輸入結束。輸出 可能有多組輸入資料,對於每組輸入資料,輸出n行,其中每一行對應上面的乙個數的約數的個數。樣...
九度OJ 1087 約數的個數
題目1087 約數的個數 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 6056 解決 1838 題目描述 輸入n個整數,依次輸出每個數的約數的個數 輸入 輸入的第一行為n,即陣列的個數 n 1000 接下來的1行包括n個整數,其中每個數的範圍為 1 num 1000000000 當n...