又见素数(素数筛法)
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 10Sample 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]
相关文章推荐
- 用C语言实现素数筛法获取一亿(100000000)以内的全部素数
- hdoj 1431 素数回文【素数筛法+回文数判断打表】
- 素数判断和素数筛法
- hdu 2098 分拆素数和(素数筛法)
- PAT乙级(Basic Level)真题 数素数(素数筛法)
- Max Factor(素数筛法+把一个数进行素数分解) HDU2710
- HDU 4548 美素数 (素数筛法)
- UVA 3883 某区间的素数 【素数筛法】
- 素数筛法系列之4 预先删除小素数
- 【VC6.0】素数筛法获取全部素数(埃拉托斯特尼筛法)
- 素数筛法,找到0到max之间的所有素数
- nefu 582 素数判定(素数筛法和基本法双排)
- 【快速查找素数 (素数筛法两种模版)】
- HDU - 2012 素数判定 (素数筛法)
- hdoj 1431 素数回文【打表+素数筛法+回文数判断】
- 素数筛法求素数(线性时间)
- PAT 乙级 Basic Level 1007. 素数对猜想(素数筛法)
- 求素数:普通版素数筛法/快速版素数筛法
- 素数判定 & 素数筛法 & poj_3292_Semi-prime H-numbers
- nyoj 26 孪生素数 素数筛法