題目
鍵盤輸入一個數, 判斷是否爲素數
思路
-
最直觀的想法就是用1-n 中間的數依次除, 有能被整除的那就不是了。這樣的時間複雜度是O(n).
-
我們可以總結一下:一個數字, 如果它是兩個數字的乘機,那麼它的分解因子怎麼分佈呢?
15 = 3 * 5, 3 5 都小於 15/2
16 = 2 * 8 2 8 小於等於 16/2 這應該就是最極端的了吧
綜上, 我們就可以只試 2- n/2 之間的數就可以了 -
我們進一步總價一下:
16 = 2 * 8
= 4 * 4
= 8 * 224 = 2 * 12
= 3 * 8
= 4 * 6
= 4. 8989 * 4.8989
= 6 * 4
= 8 * 3
= 12 * 2
我們發現, 被乘數 增加, 乘數就減小。 過了某一個界限, 其實就是乘數和被乘數互換位置。 鑑於乘法的交換律。 其實就是一樣的了。那麼這個界限是什麼呢。最理想的時候也就是 n的開方
代碼
#include<stdio.h>
#include<math.h>
int main()
{
int a = 0;
scanf("%d", &a);
if (a < 1) {
printf("funck\n");
return 0;
}
int i = 0;
for (i = 2; i * i <= a; ++i) {
if (! (a % i)) {
printf("No\n");
return 0;
}
}
printf("Yes\n");
return 1;
}