题目
求1000以内的素数
Description
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。
两种方法求素数,第一种普普通通。第二种是厄拉多塞筛选法。
没啥可说的,有的是人去写,我就记录一下自己学习过程。
有一个点注意一下,在通常某一项arry[n],如果前面所有的数都已经对这个数组进行筛选了,那么arry[n]就一定已经被晒过了,所以它是不是素数直接判断输出就好了(因为判断一个数是不是素数其实只需要判断他的算数平凡根以内的数是不是他的因数就好了)。。。显得罗嗦了
代码
代码如下(示例):
普通做法
#include<stdio.h>
int main() {
int i = 0;
for (int j = 1; j < 1000; j++) {
for (i = 2; i < j; i++) {
if (j % i == 0) {
break;
}
}
if (i == j) {
printf("%d\n", j);//是素数
}
}
return 0;
}
没事别在循环判断条件里面加函数啥的,每次循环都算一遍,傻不傻。
筛选法
#include<stdio.h>
int main() {
int arry[1001] = { 0 };
for (int i = 2; i <= 1000; i++) {
if (arry[i] == 0) {//是素数
printf("%d\n", i);
//筛掉素数的倍数
for (int j = i+i; j <= 1000; j+=i) {
arry[j] = 1;
}
}
}
return 0;
}
总结
王八翻身—左一个规定,右一个规定