打印0~n之间的素数
代码如下所示:
#include<stdio.h>
void Isprime(int n)
{
int i,j;
for (i = 2; i <= n; i++)//产生了2~n个的数字,因为1不
{
for (j = 2; j <= i; j++)//若i是素数,在2~(i-1)中i对任何数取余都不等于0
{
if (i%j == 0)
{
break;//表示i不是素数就没必要在往下取余了,直接跳出该循环,i++,进行下一个数的判断就好了
}
}
if (j>=i)
{
printf("%d\t", i);
}
}
}
int main()
{
int a = 0;
printf("请输入你要打印到多少的素数:");
scanf("%d", &a);
Isprime(a);
printf("\n");
return 0;
}
例如答应0~300之间的素数结果如下图所示:
打印素数的优化代码1:
优化思想:例如 :9=1x9或者9=3x3;
8=2x4或者8=1x8…
n=axb;会发现其中有个因数a或者b一定是小于或者等于n/2的
所以优化代码如下:
#include<stdio.h>
void Isprime(int n)
{
int i,j;
for (i = 2; i <= n; i++)//产生了2~n个的数字
{
for (j = 2; j <= i/2; j++)//若i是素数,在2~(i/2)中i对任何数取余都不等于0
{
if (i%j == 0)
{
break;//表示i不是素数就没必要在往下取余了,直接跳出该循环,i++,进行下一个数的判断就好了
}
}
if (j>i/2)
{
printf("%d\t", i);
}
}
}
int main()
{
int a = 0;
printf("请输入你要打印到多少的素数:");
scanf("%d", &a);
Isprime(a);
printf("\n");
return 0;
}
打印素数的优化代码2:
优化思想:例如 :9=1x9或者9=3x3;3是等于根号9的
8=2x4或者8=1x8.;2小于根号8的…
n=axb 会发现其中有个因数a或者b一定是小于或等于根号n的
注意:sqrt()函数是在<math.h>的头文件里,并且是double类型的
所以优化代码如下:
#include<stdio.h>
#include<math.h>
void Isprime(int n)
{
int i,j;
for (i = 2; i <= n; i++)//产生了2~n个的数字
{
for (j = 2; j <=sqrt((double)i); j++)//若i是素数,在2~(根号i)中i对任何数取余都不等于0
{
if (i%j == 0)
{
break;//表示i不是素数就没必要在往下取余了,直接跳出该循环,i++,进行下一个数的判断就好了
}
}
if (j>=sqrt((double)i))
{
printf("%d\t", i);
}
}
}
int main()
{
int a = 0;
printf("请输入你要打印到多少的素数:");
scanf("%d", &a);
Isprime(a);
printf("\n");
return 0;
}
还有一种优化思想是去掉偶数项,因为偶数一定不是素数哦
自己可以试着写一写哦,加油哦