HDOJ 4861 Couple doubi
来源:互联网 发布:如何用微博推广淘宝 编辑:程序博客网 时间:2024/06/11 16:10
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4861
题意:给我们n个球和一个质数p,求的编号从1~n,编号为i的球的价值为1^i+2^i+3^i+……(p-1)^i mod p,然后两个人轮流开始拿球,直到球拿完,拿完球后谁的价值总和最高谁就赢,问我们先手是否能够获胜。
首先,很容易想到当i为(p-1)的倍数的时候,价值最大为p-1,因为p为质数,根据欧拉-费马定理,i^(φ(p) == p-1) mod p = 1,所以总和就是p-1,也就是最大值。
那么我们再来看i不为(p-1)的倍数的情况,我们设g为p的原根,那么1,2,3,4……p-2,p-1,就可以表示成g^1,g^2,g^3……g^p-1(注意,这里不一定是按顺序对应的),那么我们的价值就变成了g^i*1,g^i*2,g^i*3……g^i*(p-1),那么求和就变成了一个等比数列的求和,所以价值就为(g^i * (g^i*(p-1) - 1) * (g^i - 1)^(p-2) -- (注意,公式后面的乘(g^i-1)^(p-2)是对等比数列中除以(g^i-1)转换为乘逆元的形式),又因为g^(p-1) * i等于1,所以价值就一定为0.
所以我们得到了一个结论,那就是如果编号是p-1的倍数,那么价值为1,如果编号不为p-1的倍数,价值就为0,所以如果价值为1的数的个数是奇数,先手就能赢,如果是偶数就不能赢。
#include <cstdio>typedef long long LL;int main(){LL k,p;while(scanf("%I64d%I64d", &k,&p) !=EOF){LL tmp = k/(p-1);if(tmp&1) printf("YES\n");else printf("NO\n");}}
0 0
- HDOJ 4861 Couple doubi
- HDOJ 4861 Couple doubi
- hdoj 4861 Couple doubi 【打表找规律】
- hdu 4861 Couple doubi
- hdu 4861 Couple doubi
- hdu-4861-Couple doubi
- hdu 4861 Couple doubi
- HDU 4861 Couple doubi
- HDU 4861 Couple doubi
- HDU 4861 Couple doubi(数论)
- hdu 4861 Couple doubi(数论)
- HDU 4861 Couple doubi 数论
- HDU 4861 Couple doubi (数论)
- HDU 4861(多校)1001 Couple doubi
- hdu 4861 Couple doubi(费马小定理)
- HDU 4861 Couple doubi (费马小定理)
- HDU4861 Couple doubi
- HDU4861:Couple doubi
- 【SSH视频】--- spring中的事务和hibernate中的session应用
- Jmeter测试Java请求示例
- linux crontab命令用法
- IONIC----02.ionicBackdrop
- android中Context的作用
- HDOJ 4861 Couple doubi
- Ne10开源库
- css3背景
- Java查看动态代理生成的代码 in Action
- eclipse c++ 问题Launch failed,Binary not found和A program file was not specified in the launch configur
- kmeans()和partition()对自己的数据聚类
- 50个常用的sql语句
- HttpClient4.5 阻止Url重定向方法
- Tomcat部署Maven项目后报错A child container failed during start