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);
}

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