九度oj 題目1087 約數的個數

2021-09-21 16:30:45 字數 1585 閱讀 2437

題目描述:輸入n個整數,依次輸出每個數的約數的個數

輸入:輸入的第一行為n,即陣列的個數(n<=1000)

接下來的1行包括n個整數,其中每個數的範圍為(1<=num<=1000000000)

當n=0時輸入結束。

輸出:可能有多組輸入資料,對於每組輸入資料,

輸出n行,其中每一行對應上面的乙個數的約數的個數。

樣例輸入:

5

1 3 4 6 12

樣例輸出:

123

46

這個題目呢,大家可以對比一下以下不同的做法。

**一:九度oj測試結果耗時290ms。

1/*2

* 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 }

**二:耗時間1000ms

1

int main(void)2

23 cnt = cnt*(t+1

);24

}25 printf("

%d\n

", cnt);26}

27}28return0;

29 }

**三:耗時20ms

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...