题目大意:给出k个球 每个球的价值是(i=1,2,3,....k) values=1^i+2^i+3^i+......+(p-1)^i
其中p是素数
思路 : 数据没有上限,打表找规律。
注意拿球的顺序并不是挨个拿,可以是乱序的,因此第一个拿的不是赢就是平
打表发现周期为p-1 因此存在k/(p-1) 个非0值
如果k是奇数 ,第一个多拿,如果k是偶数,则可能是平手
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int k,p;
while(scanf("%d%d",&k,&p)!=EOF)
{
if(k/(p-1)%2)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}