合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。💪🏻
C
語言 判斷是否是素數
一、代碼 ??
#include <stdio.h>
#include <stdbool.h> // 使用 bool 類型// 判斷是否是素數的函數
bool isPrime(int num) {if (num <= 1) {return false; // 素數要大于1}if (num == 2) {return true; // 2 是素數}if (num % 2 == 0) {return false; // 偶數(除了 2)不是素數}// 檢查從 3 到 sqrt(num) 的奇數for (int i = 3; i * i <= num; i += 2) {if (num % i == 0) {return false; // 如果能被整除,則不是素數}}return true; // 否則是素數
}int main() {int num;// 輸入一個整數printf("請輸入一個整數: ");scanf("%d", &num);// 調用函數判斷是否是素數if (isPrime(num)) {printf("%d 是素數。\n", num);} else {printf("%d 不是素數。\n", num);}return 0;
}
二、部分代碼分析 ??
for (int i = 3; i * i <= num; i += 2) {if (num % i == 0) {return false; // 如果能被整除,則不是素數}
}
因為質數是只能被
1
和它本身 整除的數,如果num
不是質數的話,那么它應該就可以表示成a*b=num
。如果a
和b
都大于num
的平方根的話,那么a*b
就會大于num
。就和前面a*b=num
矛盾了。所以說a
或者b
肯定有一個是小于或等于num
的平方根。因此for
循環那里i*i<=num
,后面那個i+=2
是為了保證每次檢查的num
都是奇數,因為偶數除了2
以外,必然不是質數。
如果一個數能通過平方根得出一個整數值,那么這個數肯定不是質數。所以那里的條件應該是i<=根號num
。但是有可能是無理數,就不好比較啦。就通過i*i<=num
來實現。