HDOJ 4861 Couple doubi
2016-07-11 17:09
211 查看
题目链接: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");
}
}
题意:给我们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");
}
}
相关文章推荐
- HDU2669 Romantic
- 除去ScrollView拉到尽头时再拉的阴影效果
- SQL Server中Text和varchar(max)数据类型区别
- 套接口选项
- AMD和CMD的"同步"加载方式原理
- 【Python学习笔记】IO编程:操作文件和目录
- iOS 发送的位置能调用本机地图导航资料整理
- MySQL 5.7.13-winx64.zip安装笔记
- Python文件的存取
- 暑期第一弹<搜索> A - 棋盘问题(简单dfs)
- 数据结构关于AOV与AOE网的区别
- Yii2之activeform部分随笔
- 提交按钮默认不可点击,表单input输入正确后才可点击
- 转:Linux中find命令-path -prune用法详解
- 我就是吐槽SVN
- 【安卓小技巧】WebView设置在本页面打开网页,而不是启动浏览器打开
- 阿里云Linux安装软件镜像源
- UNIX
- php引擎优化
- SQL Server存储过程