您的位置:首页 > 其它

又见素数(素数筛法)

2010-05-29 13:05 162 查看
又见素数Time Limit:2000MS Memory Limit:65536KTotal Submit:287Accepted:24Description 给定一个正整数n(n <=10000000),求n(包含)以内素数的个数。Input 第一行为一个整数t(t <= 1000),表示测试数据的组数。接下来有t行,每行一个整数n。Output 对于每个n,求n以内素数的个数。Sample Input
2
5
10
Sample Output
3
4
用了郭嵩山老师的《国际大学生程序设计例题解》上的改进的线性筛法。
原理是任何一个数都可以分解成素数相乘的形式。
#include <iostream>using namespace std;const int MAXN=10000001;bool isprime[MAXN]={0};int prime[670000];int init(){int i,j,total=0;memset(isprime,true,sizeof(isprime));for(i=2;i<=MAXN;i++){if(isprime[i])prime[total++]=i;for(j=0;j<total && i*prime[j]<=MAXN;j++){isprime[i*prime[j]]=false;if(i%prime[j]==0)break;}}return total;}int main(){int T,n,i,total;total=init();scanf("%d",&T);while(T--){scanf("%d",&n);for(i=0;i<total;i++)if(n<prime[i])break;printf("%d/n",i);}return 0;}
[/code]

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: