数学专项number_theory:UVa 11105
2013-04-30 20:49
253 查看
先用类似筛素数的方法,筛出primeH_number。然后所有primeH_number两两相乘所得的数即为semi-primeH_number了。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define M 1000010 int vis[M]; int prime[M],p; int cnt[M]; void init() { memset(vis,0,sizeof(vis)); p=0; for(int i=1;4*i+1<=1000001;i++) if(!vis[4*i+1]) { prime[p++]=4*i+1; for(int j=1;4*j+1<=1000001;j++) if((long long)(4*j+1)*(4*i+1)>1000001) break; else vis[(4*i+1)*(4*j+1)]=1; } for(int i=0;i<p;i++) for(int j=i;j<p;j++) if((long long)prime[j]*prime[i]>1000001) break; else vis[prime[j]*prime[i]]=2; memset(cnt,0,sizeof(cnt)); for(int i=1;i<=1000001;i++) if(vis[i]==2) cnt[i]=cnt[i-1]+1; else cnt[i]=cnt[i-1]; } int main() { freopen("in.txt","r",stdin); int n; init(); while(cin>>n&&n) { cout<<n<<" "<<cnt <<endl; } return 0; }
相关文章推荐
- 数学专项number_theory:UVa 10622
- 数学专项number_theory:UVa 10090
- 数学专项number_theory:UVa 718
- 数学专项number_theory:UVa 10127
- 数学专项number_theory:UVa 10539
- 数学专项number_theory:UVa 10692
- 数学专项number_theory:UVa 10951
- 数学专项number_theory:UVa 294
- 数学专项number_theory:UVa 10236
- 数学专项number_theory:UVa 10368
- 数学专项number_theory:UVa 10162
- 数学专项number_theory:UVa 11728
- 数学专项number_theory:UVa 756
- 数学专项number_theory:UVa 10515
- 数学专项number_theory:UVa 11768
- 数学专项number_theory:LA 3262
- 数学专项number_theory:LA 4382
- 数学专项number_theory:LA 2955
- 数学专项number_theory:LA 4079
- 数学专项game_theory:UVa 11927