题目:http://poj.org/problem?id=3292
题意:一个初值为5,差为4的等差数列是 H-numbers
把 H-numbers分类:1、H-primes指当且仅当它的因数只有1和它本身;(1除外)
2、剩下的为H-composite
求1到h之间,H-semi-prime(只能用两个H-primes的乘积)的个数
一开始题目的意思理解错了,好好看题才是天理啊
View Code
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int num[1000010]; 6 void init() 7 { 8 memset(num,0,sizeof(num)); 9 int i,j; 10 int sum; 11 for(i=5;i<=1000001;i=i+4) 12 { 13 for(j=5;j<=1000001;j+=4) 14 { 15 sum=i*j; 16 if(sum>1000001) 17 break; 18 if(num[i]==0&&num[j]==0) 19 { 20 num[sum]=1; 21 } 22 else 23 { 24 num[sum]=-1; 25 } 26 } 27 } 28 int count=0; 29 for(i=1;i<=1000001;i++) 30 { 31 if(num[i]==1) 32 count++; 33 num[i]=count; 34 } 35 return ; 36 } 37 int main() 38 { 39 int n; 40 init(); 41 while(scanf("%d",&n)!=EOF) 42 { 43 if(n==0) 44 break; 45 cout<<n<<" "<<num[n]<<endl; 46 } 47 return 0; 48 }