Address:http://acm.hdu.edu.cn/showproblem.php?pid=1286 || http://poj.org/problem?id=3292
hdu1286:中文题 自己应该都能读懂。
poj3292:给你一个数,这个数 是4n+1,看能分成多少个(4i+1)*(4j+1)。
1、
#include<iostream>
#include<cstring>
using namespace std;
#define MAX 32775
bool fri[MAX];
int main()
{
int T;
cin>>T;
while(T--)
{
int n,i,j;
cin>>n;
memset(fri,1,sizeof(fri));
for(i=2;i<=n;i++)
{
if(n%i==0)
{
for(j=i;j<=n;j+=i)
fri[j]=0;
}
}
int count=0;
for(i=1;i<=n;i++)
{
if(fri[i])
count++;
}
cout<<count<<endl;
}
return 0;
}
2、
#include<iostream>
#include<cstring>
using namespace std;
#define MAX 1000010
int Hnum[MAX];
void table()
{
memset(Hnum,0,sizeof(Hnum));
int i,j;
for(i=5;i<=1000001;i+=4)
{
for(j=5;j<=1000001;j+=4)
{
int mul=i*j;
if(mul>MAX)
break;
if(Hnum[i]==0&&Hnum[j]==0)
Hnum[mul]=1;
else
Hnum[mul]=-1;
}
}
int count =0;
for(i=0;i<=1000001;i++)
{
if(Hnum[i]==1)
count++;
Hnum[i]=count;//1--i 之间的输出结果
}
}
int main()
{
table();
int n;
while(cin>>n&&n)
{
cout<<n<<" "<<Hnum[n]<<endl;
}
return 0;
}