题意:[1..n]内随机一个数x,每次可以问x是不是y的倍数.
n<=1000.当提问的序列是唯一时,问至少要问多少次才能确定x的值.
也就是说不管x是1到n之间的哪个数字只要问那些问题就能够确定那个数字了.
样例n=4,则无论x是什么 只要问y=2,4,3,就能确定x.
假如只问2,3 当回答yes,no时则不能确定x是2还是4.
p为某素数,p^k<=n,如果提问序列中没有p^k,则无法确定x是p^k还是p^(k-1)
n<=1000.当提问的序列是唯一时,问至少要问多少次才能确定x的值.
也就是说不管x是1到n之间的哪个数字只要问那些问题就能够确定那个数字了.
样例n=4,则无论x是什么 只要问y=2,4,3,就能确定x.
假如只问2,3 当回答yes,no时则不能确定x是2还是4.
p为某素数,p^k<=n,如果提问序列中没有p^k,则无法确定x是p^k还是p^(k-1)
现在提问序列有<=n内所有素数的幂次 则提问之后可以确定每个素数的幂 从而确定唯一的x.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e3+20;
int n;
int pn,pri[N],vis[N];
void init()
{
for(int i=2;i<=n;i++)
if(!vis[i])
{
pri[++pn]=i;
for(int j=i+i;j<=n;j+=i)
vis[j]=1;
}
}
int main()
{
scanf("%d",&n);
init();
int cnt=0;
for(int i=1;i<=pn;i++)
{
for(int j=pri[i];j<=n;j*=pri[i])
cnt++;
}
printf("%d\n",cnt);
return 0;
}