|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #define MAX 1000000000//定义一个数组长度
- bool prime[MAX + 1];//素数表
- int main()
- {
- int i, j, count = 0;//count为计数器
- memset(prime, true, sizeof(prime));//初始化,将prime数组全部都初始化为true
- prime[0] = prime[1] = false; prime[2] = true;//0,1都不是素数,所以为false,2是素数,所以为true
- for(i = 2; i * i <= MAX; i ++)
-
- {
- if(prime[i])//如果没有被标记的话将它的倍数的数标记(标记就是将它赋值为false)
- {
- for(j = i + i; j <= MAX; j += i)//因为是从2开始的,所以j = i * i 就行了,最小的一个他的倍数的就是i * i了,不可能有比这个更小的了
- prime[j] = false;//标记为false
- }
- }
- for(i = 2; i <= MAX; i ++)//遍历一下,找出所有的素数来
- if(prime[i])
- count ++;//如果没有被标记,计数器++
- printf("count is :%d\n", count);
- return 0;
- }
复制代码
for(i = 2; i * i <= MAX; i ++)为什么只需要遍历i<=sqrt(MAX)就行了呢? |
|