题目链接:https://vjudge.net/problem/POJ-3292
题意:输入1个n,求解1~n中满足数值等于两个数a,b相乘(a%4==1,b%4==1)
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<vector>
#include<cstring>
#define LL long long
using namespace std;
#define N 1100000
int a[1100000];
int cnt[1100000];
void init()
{
for(int i=5;i<=N;i+=4)
{
for(int j=5;j*i<=N;j+=4)
{
if(a[i]==0&&a[j]==0)
a[i*j]=1;
else
a[i*j]=-1;
}
}
}
int main()
{
memset(a,0,sizeof(a));
memset(cnt,0,sizeof(cnt));
init();
int cnt1=0;
for(int i=1;i<=1000010;i++)
{
if(a[i]==1)
{
cnt1++;
// cout<<i<<endl;
}
cnt[i]=cnt1;
}
int n;
while(cin>>n&&n)
{
cout<<n<<' '<<cnt[n]<<endl;
}
return 0;
}