5. 判斷一個數是否爲質數(素數)

題目

鍵盤輸入一個數, 判斷是否爲素數

思路

  1. 最直觀的想法就是用1-n 中間的數依次除, 有能被整除的那就不是了。這樣的時間複雜度是O(n).

  2. 我們可以總結一下:一個數字, 如果它是兩個數字的乘機,那麼它的分解因子怎麼分佈呢?
    15 = 3 * 5, 3 5 都小於 15/2
    16 = 2 * 8 2 8 小於等於 16/2 這應該就是最極端的了吧
    綜上, 我們就可以只試 2- n/2 之間的數就可以了

  3. 我們進一步總價一下:
    16 = 2 * 8
    = 4 * 4
    = 8 * 2

    24 = 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;
}

運行結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章