算法分析:
所谓素数,是指除了1和该数本身之外,不能被其他任何整数整除的数。例如,13是素数,因为它不能被2,3,4,…,12整除。
判断一个数n(n≥3)是否素数的方法是很简单的:将n作为被除数,将2到(n-1)各个整数轮流作为除数,如果都不能被整除,则n为素数。
算法可以表示如下:
S1:输入n的值
S2:2→i(i作为除数)
S3:n被i除,得余数r
S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5
S5:i+1→i
S6:如果i≤n-1,返回S3;否则打印n“是素数”,然后结束。
实际上,n不必被2到(n-1)的整数除,只需被2到n/2间整数除即可,甚至只需被2到sqrt(n)之间的整数除即可。例如,判断13是否素数,只需将13被2、3除即可,如都除不尽,n必为素数。S6步骤可改为:
S6:如果i≤sqrt(n),返回S2;否则算法结束。
此算法对应的源程序如下:
/* 程序一 */
main(){
int n,i=2,isPrime=1;
printf("Input n:\n");
scanf("%d",&n);
while(i<=n-1){
if(n%i==0){
isPrime=0;
break;
}
i++;
}
if(isPrime) printf("%d 是素数",n);
else printf("%d 不是素数",n);
}
/* 程序二 */
#include "math.h"
main(){
int n,i=2,isPrime=1;
printf("Input n:\n");
scanf("%d",&n);
while(i<=sqrt(n)){
if(n%i==0){
isPrime=0;
break;
}
i++;
}
if(isPrime) printf("%d 是素数",n);
else printf("%d 不是素数",n);
}