C语言求素数的不同解法

来源:互联网 发布:pc6软件 编辑:程序博客网 时间:2024/05/16 11:53

C语言求素数的不同解法,不同编码。不同的编码对应不同的效率。

1、求a到b之间的素数:

(1)一般的:

#include "stdio.h"void main(){ int a,b; int i,n; int flag=1; printf("请输入下限:"); scanf("%d",&a); printf("请输入上限:"); scanf("%d",&b);  printf("%d到%d之间的素数为:",a,b); for (i=a;i<=b;i++) {  flag=1;  for (n=2;n<i;n++) {   if (i%n==0) {    flag=0;   }  }  if ((flag==1)&&(i!=1)) {   printf("%d \n",i);  } }}


 

(2)、高效的:

#include <stdio.h>#include <math.h>int main(){    int a, b, n; int na,nb; int i; printf("please input a:\n"); scanf("%d",&na); printf("please input b:\n"); scanf("%d",&nb); i=1;    for (a =na; a <=nb; a++)    {        for (b = 2; b <= sqrt(a) && a % b != 0; b++);           if (b > sqrt(a)){           //开方,减少复杂度。            printf("%d:%d\n", i,a);   i++;  }    }}


 

 

2、求小于b的素数:

第一种就不求了,用第二种直接得出:

#include <stdio.h>#include <math.h>int main(){    int a, b, n; int i; printf("please input n:\n"); scanf("%d",&n); i=1;    for (a =2; a <=n; a++)    {        for (b = 2; b <= sqrt(a) && a % b != 0; b++);           if (b > sqrt(a)){                   printf("%d:%d\n", i,a);   i++;  }    }}

3、小于b的最大素数:

#include <stdio.h>#include <math.h>int main(){    int a, b, n;int i,j=1;printf("please input n:\n");scanf("%d",&n);i=1;    for (a =2; a <=n; a++)    {        for (b = 2; b <= sqrt(a) && a % b != 0; b++);           if (b > sqrt(a)){       j=a;i++;}    }printf("answer:%d\n",j);} 


时间测试之后博文会加上,有意者请关注后续。