求素数
求素数
Time Limit: 100ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
求小于n的所有素数的数量。
输入
多组输入,输入整数n(n<1000000),以0结束。
输出
输出n以内所有素数的个数。
示例输入
10 0
示例输出
4
刚开始尝试过很多方法去掉偶数,循环变成sqrt(n)都不行,最后终于想起这思路:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1000000 int s1[1000000]; int s2[1000000]; int main() { int i,j; memset(s1,0,sizeof(s1)); for(i=2;i<MAX;i++) { if(s1[i]==0) { for(j=2;j*i<MAX;j++) s1[i*j] = 1; } } s2[0] = 0; s2[1] = 0; int t = 0; for(i=2;i<MAX;i++) if(s1[i]==0) { t++; s2[i] = t; } else s2[i] = t; int n; while(scanf("%d",&n)&&n!=0) { printf("%d\n",s2[n]); } return 0; }