咨询电话:010-82823766

判断一个大于或等于3的正整数是否是素数
  • 2008-11-25 10:20:57
  • 发表时间:
  • 浏览次数:
  • 网络
  • 文章来源:
  • 佚名
  • 作者:

算法分析:

  所谓素数,是指除了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);
}

top
推荐导读
推荐导读
bottom
top
热门文章
热门文章
bottom