Codeforces Round #319 (Div. 2) ——C. Vasya and Petya's Game(数学题)

来源:互联网 发布:中准会计师事务所 知乎 编辑:程序博客网 时间:2024/05/16 05:58

题意:

现在A选了一个数x,范围在1~n内,你每次可以询问一个数y,然后A会告诉你x%y是否等于0,然后问你以最少的步数猜出这个数的过程,并输出最小步数。

思路:

感觉像是推理题,数学问题果然还是不强。

首先我们肯定要选取p^k(p是素因子),这里可以用反证法理解,如果不选p^k,那么就分辨不出p^k了。所以肯定要选p^k。

或者说,质数的指数次都是要被查询的,这里一开始我不是很明白,但是举个例子吧:1 2 3 4 5 6 7 8,如果只判断2,那么4,8的存在就不知道了。而6可以通过2,3,以及其他数不存在而推出来。

所以,质数的指数次是肯定要输出的。

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;typedef __int64 ll;#define maxn 1010int y[maxn];int main(){int n;scanf("%d",&n);memset(y,0,sizeof(y));int cnt=0;for(int i=2;i<=n;i++){int p=2,q=i;while(q%p!=0){p++;}while(q%p==0){q=q/p;}if(q==1){y[cnt++]=i;}}printf("%d\n",cnt);for(int i=0;i<cnt;i++){if(i!=cnt-1) printf("%d ",y[i]);else printf("%d\n",y[i]);}}

*多练练,思考!!!thinking。。。。

0 0
原创粉丝点击