輸出1到n中所有的素數
阿新 • • 發佈:2018-12-29
思路:判斷一個數n是否為素數,分別將2到[根號n](即根號n取整)作為除數,若都不整除,則n為素數。
第一次程式碼:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
/* 找出1到n內所有素數.c */
/* written by Chen Gengru */
/* updated on 2018-11-2 */
int main()
{
int iP, i, j;
float fN, fSqN;
printf("請輸入n\n");
scanf("%f", &fN);
for (iP = 2; iP <= fN; iP++)
{
fSqN = sqrt(fN);
for(i = 2, j=0; i <= fSqN ; i++)
{
if (iP % i == 0)
{
j++;
}
}
if (j == 0)
{
printf("%d\n", iP);
}
}
return 0;
}
結果:
發現並不是想象中的結果,前幾個素數總是不能輸出。事實上,小於等於根號n取整的素數都無法輸出。
這是怎麼回事呢?原來,文章開頭所說的分別以2到根號n取整作為除數在這段程式碼裡應該解釋為:分別以2到根號iP取整,而並不是拿作為上限判斷的n來開根號作除數。
修改:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
/* 找出1到n內所有素數.c */
/* written by Chen Gengru */
/* updated on 2018-11-2 */
int main()
{
int iP, iN, i, j;
float fSqN;
printf("請輸入n\n");
scanf("%d", &iN);
for(iP = 2; iP <= iN; iP++)
{
fSqN = sqrt(iP);
for(i = 2, j=0; i <= fSqN ; i++)
{
if (iP % i == 0)
{
j++;
}
}
if (j == 0)
{
printf("%d\n", iP);
}
}
return 0;
}
結果:
成功!