【描述】
输入一个大于3的整数,判定它是否为素数。
【C语言】
#include<stdio.h>
int main() {
int i;
int j;
scanf("%d", &i);
for (j = 2; j < i; j++)
if (i % j == 0)
break;
if(j<i)
printf("Is not Prime.");
else
printf("Is Prime.");
return 0;
}
【描述】
求100-200之间的全部素数。
【C语言】
int main() {
int i, j;
int flag;
for (i = 100; i <= 200; i++) {
flag = 1;
for (j = 2; j < i; j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag != 0)
printf("%d\n", i);
}
return 0;
}
运行结果:
【程序改进】
判断一个正整数m是否为素数有多种方法。
方法1:让m依次被2,3,…,m-1除,如果m不能被2~m-1中的任何一个整数整除,则m是素数。
方法2:让m依次被2,3,…,m/2除,如果m不能被2~m/2中的任何一个整数整除,则m是素数。
方法3:让m依次被2,3,…,sqrt(m)除,如果m不能被2~sqrt(m)中的任意一个整数整除,则m为素数。sqrt(m)为m的平方根。
其中,最后一种速度最快。
【描述】
用筛选发求100之内的素数。
【思路分析】
所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。
具体做法如下:
<1> 先将1挖掉(因为1不是素数)。
<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3> 用3去除它后面的各数,把3的倍数挖掉。
<4> 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找1~50的素数,要一直进行到除数为47为止(事实上,可以简化,如果需要找1~n范围内素数表,只需进行到除数为根号n,取其整数即可。例如对1~50,只需进行到将根号50作为除数即可。)
如上算法可表示为:
<1> 挖去1;
<2> 用刚才被挖去的数的下一个数p去除p后面各数,把p的倍数挖掉;
<3> 检查p是否小于根号n的整数部分(如果n=1000, 则检查p<31?),如果是,则返回(2)继续执行,否则就结束;
<4> 纸上剩下的数就是素数。