#include <iostream>
#include <cstring>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <cstdio>
#include <stdio.h>
#include<queue>
#include<math.h>
#include<stack>
#include<set>
#include<map>
using namespace std;
#define ll long long
inline ll read()
{
ll k = 0, f = 1; char ch = getchar();
while (ch < '0' || ch>'9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
k = k * 10 + ch - '0';
ch = getchar();
}
return k * f;
}
const int MAX_N =2000001;
int v[MAX_N], prime[MAX_N];
ll m;
void primes(ll n)
{
memset(v, 0, sizeof(v));//最小质因子
m = 0;//质数数量
for (ll i = 5; i <= n; i+=4)
{
if (v[i] == 0)
{
v[i] = i;
prime[++m] = i;
}
for (int j = 1; j <= m; j++)
{
if (prime[j] > v[i] || prime[j] > n / i)break;
v[i * prime[j]] = prime[j];
}
}
}
ll ans[1000005];
ll sum[1000005];
int main()
{
ll n=1000001;
primes(n);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=i&&prime[i]*prime[j]<=n;j++)
{
ans[prime[i]*prime[j]]=1;
}
}
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+ans[i];
}
ll k;
while(k=read())
{
if(k==0)break;
cout<<k<<' '<<sum[k]<<'\n';
}
}
03-16
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交