赞
踩
代码如下所示:
#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; }
还有一种优化思想是去掉偶数项,因为偶数一定不是素数哦
自己可以试着写一写哦,加油哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。