POJ 3292 Semi-prime H-numbers
2014-07-26 22:39
302 查看
题意:把形如 4n+1的数称作 H数 像 1 5 9 13···· 类似素数的定义 定义了H素数 即 它的所有 H数约数 只有 1和这个数本身 例如 5 9 13 17 21 而 25 不是。又定义了semi-prime H数,如果一个数是semi-prime H数 那么 它最多只能拆成两个 H素数的积 例如 25=5*5 而 125=5*5*5 所以125不是。
给一个数n,求出1~n之间有多少semi-prime H数
解法: 用筛法去找出H素数 然后去找semi-prime H数 注意 找semi-prime H数时 会有重复 如 441=9*49=21*21
代码如下:
给一个数n,求出1~n之间有多少semi-prime H数
解法: 用筛法去找出H素数 然后去找semi-prime H数 注意 找semi-prime H数时 会有重复 如 441=9*49=21*21
代码如下:
/** 吉林大学 Jilin U Author: sinianluoye (JLU_LiChuang) Date: 2014-07-26 Usage: 一水到底 C **/ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define ll long long #define eps 1e-8 #define ms(x,y) (memset(x,y,sizeof(x))) #define fr(i,x,y) for(ll i=x;i<=y;i++) using namespace std; const ll maxn=1e6+10; bool prime[maxn]; ll pri[maxn],cnt; ll s[maxn]; void make() { cnt=0; ms(prime,0); for(ll i=1;(4*i+1)<maxn;i++) prime[4*i+1]=1; ll num=0; for(ll i=0;(4*i+1)<maxn;i++) s[num++]=i; for(ll i=5;i<maxn;i+=4) { if(prime[i]) { pri[cnt++]=i; for(ll j=5*i,k=1;j<maxn;j=(s[++k]*i)) { prime[j]=0; } } } } ll ans[maxn]; void doit() { //cout<<"here"<<endl; ll num=0; for(ll i=0;i<cnt;i++) for(ll j=0;j<=i&&((pri[i]*pri[j])<maxn);j++) { //cout<<i<<' '<<j<<endl; ans[num++]=(pri[i]*pri[j]); // if(num%10000==0)cout<<num<<endl; } sort(ans,ans+num); int f=-1; for(int i=0;i<num;i++) { if(ans[i]==f)ans[i]=maxn+1; else f=ans[i]; } sort(ans,ans+num); } int main() { make(); doit(); //cout<<cnt; //for(ll i=0;i<100;i++)cout<<i<<' '<<ans[i]<<endl; ll n; while(cin>>n,n) { ll num; for(num=0;ans[num]<=n;num++); cout<<n<<' '<<num<<endl; } } /*************copyright by sinianluoye (JLU_LiChuang)***********/
相关文章推荐
- poj 3292 Semi-prime H-numbers 筛数打表
- poj 3292 Semi-prime H-numbers
- POJ 3292 Semi-prime H-numbers
- poj-3292-Semi-prime H-numbers
- POJ 3292 Semi-prime H-numbers(类素数筛法)
- POJ 3292 Semi-prime H-numbers
- poj_3292 Semi-prime H-numbers(筛素数)
- POJ 3292 Semi-prime H-numbers (筛法统计)
- 【POJ 3292】 Semi-prime H-numbers
- POJ-3292 Semi-prime H-numbers
- poj-3292-Semi-prime H-numbers
- Semi-prime H-numbers--POJ 3292
- Mathematics:Semi-prime H-numbers(POJ 3292)
- POJ - 3292 Semi-prime H-numbers(素数筛法)
- POJ 3292.Semi-prime H-numbers
- POJ 3292 Semi-prime H-numbers
- POJ 3292 Semi-prime H-numbers 笔记
- poj 3292 Semi-prime H-numbers
- POJ 3292:Semi-prime H-numbers 筛选数
- POJ3292——Semi-prime H-numbers