判斷輸入的正整數是否為素數


判斷一個數 m (m >= 3) 是否為素數可以用窮舉法,用 2,3,4,···,m-1 逐個去除 m ,判斷余數是否為 0 

只要有任意一個余數為0,則 m 一定不是素數;若所有的余數都不為 0,則 m 是素數。

利用素數的定義

 1 #include <stdio.h>
 2 #define _CRT_SECURE_NO_WARNINGS
 3 
 4 int main()
 5 {
 6     int num, i,flag=0;                                   // i 表示被除數, flag 表示除了1和本身外,可以整除的被除數的個數
 7     printf("Input a positive integer : ");
 8     scanf_s("%d", &num);
 9 
10     if (num <= 0)
11     {
12         printf("It's not a positive integer.");
13     }
14     else if (num >0 && num <= 2)
15     {
16         printf("It's a prime number.");
17     }
18     else if (num > 2)
19     {
20         for (int i = 2; i < num; i++)
21         {
22             if (num % i != 0) 23                 continue; 24             flag++; 25         }
26 
27         if (flag == 0)
28             printf("It's a prime number");
29         else
30             printf("It's not a prime number");
31     }
32     return 0;
33 }

 

 

 1 #include <stdio.h>
 2 #define _CRT_SECURE_NO_WARNINGS
 3 
 4 int main()
 5 {
 6     int num, i,flag=0;                                   // i 表示被除數, flag 表示可以整除的被除數的個數
 7     printf("Input a positive integer : ");
 8     scanf_s("%d", &num);
 9 
10     if (num <= 0)
11     {
12         printf("It's not a positive integer.");
13     }
14     else if (num >0 && num <= 2)
15     {
16         printf("It's a prime number.");
17     }
18     else if (num > 2)
19     {
20         for (int i = 2; i < num; i++)
21         {
22             if (num % i == 0) 23                 flag++; 24         }
25 
26         if (flag == 0)
27             printf("It's a prime number");
28         else
29             printf("It's not a prime number");
30     }
31     return 0;
32 }

 

 

利用根號下m

實際上可以證明,判斷 m 為素數,只需要 2 ~ m/2 之間的整數去除 m,或者用 2 ~ 根號m 之間的整數去除就可以了。

這樣可以大大減少循環的次數,提高程序的執行效率。

根號m 涉及到函數 sqrt() ,作用是計算平方根,使用時需要包含頭文件math.h

如果 m 不能被 2 ~ k 之間的任意一個整數整除,break 語句就不會執行,在完成最后一次循環時 i 變量要加1,此時 i > k 成立,m 為素數;

如果 m 能夠被2 ~ k 之間的任意一個整數整除,break 語句就會被執行,從而提前結束循環,此時 i > k 不成立,m 不是素數;

 1 #include <stdio.h>
 2 #include <math.h>
 3 int main(){
 4     int m;  // 輸入的整數 
 5     int i;  // 循環次數
 6     int k;  // m 的平方根 
 7 
 8     printf("輸入一個整數:");
 9     scanf("%d",&m);
10 
11     // 求平方根,注意sqrt()的參數為 double 類型,這里要強制轉換m的類型 
12     k=(int)sqrt( (double)m );
13     for(i=2;i<=k;i++)
14         if(m%i==0)
15             break;
16 
17     // 如果完成所有循環,那么m為素數
18     // 注意最后一次循環,會執行i++,此時 i=k+1,所以有i>k 
19     if(i>k)
20         printf("%d是素數。\n",m);
21     else
22         printf("%d不是素數。\n",m);
23 
24     return 0;
25 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM