HDU 4910 HDOJ Problem about GCD BestCoder #3 第四题
首先 m = 1 时 ans = 0
对于 m > 1 的 情况
由于 1 到 m-1 中所有和m互质的数字,在 对m的乘法取模 运算上形成了群
ai = ( 1<=a<m && gcd(a,m) == 1 )
所以 对于 a 必然存在b = a^(-1) = inv(a) 使得 a * b = 1 (mod m)
这里存在两种情况
a != b 那么最后的连乘式中a b均出现一次,相乘得1
a == b 那么最后的连乘式中只出现一个a
实际上所有 a = inv(a) 的 ai 连乘就是答案
继续考虑假如 gcd(a,m) == 1 则 gcd(m - a, m) == 1
记m - a = -a (mod m)
那么 a * (-a) = - (a*a) = -1 (mod m)
m != 2时, m - a != a (否则 a = m/2 , gcd(m, m/2) = m/2 != 1)
所以a 和 -a 总是成对出现
所以a^2 = 1 (mod m)的解的个数/2 为奇数时,答案为-1,为偶数时 答案为1
m == 2时,求得答案为1(由于此时1和-1等价,出现了特殊性)
所以对于m > 2的情况,只需求a^2 = 1 (mod m)的解的个数是不是4的倍数
a^2 = 1 (mod m) 等价变换
(a + 1)(a - 1) = 0 (mod m)
假设 m = p0^k0 * p1^k1 * ... * pi^ki (pi为素数)
那么根据中国剩余定理 原方程等价于
方程组 (a + 1)(a - 1) = 0 (mod pi^ki)
先考虑单个方程:
pi > 2 时,(a + 1) 和 (a - 1) 必定有一个和pi互质(否则 pi % 2 == 0)
所以该条方程的解为 ±1 (mod pi^ki)
pi == 2时,
k == 1时 方程解为 1 (mod 2)
k == 2时 方程解为 ±1 (mod 4)
k > 2 方程解为 ±1, (2^(k-1)+1), (2^(k-1)-1) (mod 2^k)
当方程组只有一条方程时,情况如上所示
然后考虑多条方程,合并的情况
根据中国剩余定理,各个式子的各个取值,所有情况在范围内均有且只有一个解
所以方程组解的个数,就是各个方程解的个数的乘积
m > 2时,解的个数不是4的倍数情况(也就是2)只有以下几种
m = 2^2 = 4
m = p^k (p != 2, 且为素数)
m = 2 * p^k (p != 2, 且为素数)
HDU 4910 HDOJ Problem about GCD BestCoder #3 第四题的更多相关文章
- HDU 4910 Problem about GCD 找规律+大素数判断+分解因子
Problem about GCD Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]
传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131 ...
- HDU 3549 Flow Problem(最大流)
HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- hdu 5106 Bits Problem(数位dp)
题目链接:hdu 5106 Bits Problem 题目大意:给定n和r,要求算出[0,r)之间全部n-onebit数的和. 解题思路:数位dp,一个ct表示个数,dp表示和,然后就剩下普通的数位d ...
- HDU 3374 String Problem (KMP+最大最小表示)
HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others) Memory ...
- hdu 5105 Math Problem(数学)
pid=5105" target="_blank" style="">题目链接:hdu 5105 Math Problem 题目大意:给定a.b ...
- hdu 5381 The sum of gcd(线段树+gcd)
题目链接:hdu 5381 The sum of gcd 将查询离线处理,依照r排序,然后从左向右处理每一个A[i],碰到查询时处理.用线段树维护.每一个节点表示从[l,i]中以l为起始的区间gcd总 ...
- Hdu 5445 Food Problem (2015长春网络赛 ACM/ICPC Asia Regional Changchun Online)
题目链接: Hdu 5445 Food Problem 题目描述: 有n种甜点,每种都有三个属性(能量,空间,数目),有m辆卡车,每种都有是三个属性(空间,花费,数目).问至少运输p能量的甜点,花费 ...
- 网络流 HDU 3549 Flow Problem
网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...
随机推荐
- 51nod 1298 圆与三角形——计算几何
题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1298 转化成判断三条线段和圆是否
- LArea 微信端 地址选择
最近做到一个项目,微信端的商城需要地址选择功能 在百度上看了,采用LArea.js....下载实例,在移动端模拟器上运行是比较好的, 在微信上模拟后出现很多问题, 1,出现undefined 都定义正 ...
- 协程实现tcp两个客户端的通讯
import socket import gevent from gevent import monkey monkey.patch_all() def cb_work(recv_num,send_n ...
- php-安装与配置-未完待续2
一,准备工作 在入门指引中,我们已经知道PHP的3个应用领域,不同的场景,需要安装的东西是不同的.具体如下: 服务器端脚本,在通常情况下,需要三样东西:PHP 自身.一个 web 服务器和一个 web ...
- 裸机——ADC
1.首先是ADC的基本知识 模拟信号,连续的 数字信号,离散的 模拟信号,现实世界的很多东西都是连续的,所以使用模拟信号才能准确描述,但是模拟信号不方便控制. 数字信号,计算机中的信号大都为数字的,数 ...
- 2018Ec-Final比赛总结
一场匆忙的旅程. NCC_9754_ Victory的最后一场比赛终究没能victory. 去的时候晕车到吐了两次,到宾馆吃完饭直接睡了,但还是两天都昏昏沉沉的头疼的厉害,第二天直接步行去了西工大体育 ...
- Android面试收集录6 事件分发机制
转自:秋招面试宝典. 一. 基础认知 1.1 事件分发的对象是谁? 答:事件 当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件). Touch事件相关细节(发 ...
- 被relativeLayout的grivate center 折腾死了
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- Postman-CI集成Jenkins(3)
Postman-CI集成Jenkins(3) Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins Newman 官方说明:Postman's command-l ...
- 《Cracking the Coding Interview》——第4章:树和图——题目3
2014-03-19 03:34 题目:给定一个排好序的数组,设计算法将其转换为一棵二叉搜索树,要求树的高度最小. 解法:递归生成平衡二叉树,使左右子树的节点数尽量相等,所以对半开最好了.其实也可以生 ...