51Nod 1536 不一样的猜数游戏

来源:互联网 发布:专业嵌入式软件开发 编辑:程序博客网 时间:2024/05/17 04:45
题意:[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内所有素数的幂次 则提问之后可以确定每个素数的幂 从而确定唯一的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;}


原创粉丝点击