如何判斷素數?
題目要求:輸出100-200的素數
首先我們要知道什麼是素數(質數),以防有人忘記(比如剛學開始學c的我就忘記了)
素數(質數)隻能被1和它自己整除
方法1—試除法7隻能被1和7整除,是素數
9能被3整除,不是素數
#include<stdio.h>
int main()
{
int i=0;
int count=0;
for(i=100;i<=200;i )
{
int j=0;
for(j=2;j<i;j )
{
if(i%j==0)//i可以整除j,i不是素數
{
break;
}
}
if(j==i)//i隻能整除它自己,是素數
{
count ;
printf("%d ",i);
}
}
printf("\ncount=%d\n",count);//計算100-200之間有幾個素數
return 0;
}
這個代碼比較死,隻是輸出了100到200之間的素數,完成了題目的要求
我們可以把它改造成輸入一個數字,判斷是否是素數的形式
代碼改造1-1
用戶輸入一個數字
代碼判斷是否為素數
是,輸出“是素數”以及用戶輸入的值
不是,輸出“不是素數”
#include<stdio.h>
int main()
{
int i=0;
int j=0;
scanf("%d",&i);
for(j=2;j<i;j )
{
if(i%j==0)
{
printf("不是素數\n");
break;
}
}
if(j==i)
{
printf("是素數,i=%d\n",i);
}
}
結果如下:
上面的這串代碼能很好地完成我們的需求,但它還有優化的空間
方法2—開平方法方法1中的for循環為j<i
如果數字很大的話,要循環非常多次才能出現j==i的情況
這就拖慢了我們程序運行的速度
這裡我們引入一個概念
若i=a*b
a和b中至少有一個數字 <= 開平方i
如16=2x8=4x4
其中2<4
這樣就能得到一個結論:
在根号i之前一定有一個數字n是非素數的除數
如果找不到這個數字n,說明該數字為質數
利用開平方法,我們可以将需要查找的數字範圍縮小很多
以下是用該方法完成開頭題目要求的代碼示例:
#include<stdio.h>
int main()
{
int i=0;
for(i=101;i<=200;i =2)
{
int j=0;
for(j=2;j<=sqrt(i);j )
{
if(i%j==0)
{
break;
}
}
if(j>sqrt(i))
{
printf("%d ",i);
}
}
return 0;
}
将這個代碼改造成1-1那種形式也不難,自己試試吧!
感謝你看到最後!希望能夠幫到你~
-----------------------------------
為了幫助大家,輕松,高效學習C語言/C ,給大家分享我收集的資源,從最零基礎開始的,幫助大家在學習C語言的道路上披荊斬棘!
編程學習書籍分享:
編程學習視頻分享:
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)最重要的是你可以在群裡面交流提問編程問題哦!
對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!