HDU 4335 What is N? 简单数论

来源:岁月联盟 编辑:exp 时间:2012-08-06

此题就是考察了一个简单的公式

a^x % c = a^(x % phi(c) + phi(c))  %c  其中x>= phi(c)
phi(c)为欧拉函数
注意  欧拉函数的定义为 不超过n且与n互素的正整数的个数 而不是小于n
并且phi(1) =1

然后对于本题  分成三部分
第一部分  n! < phi(c)  这时就需要直接计算n! ,好在phi(c)不会很大。
第二部分 n! >= phi(c) 但是 n! % phi(c) != 0   这一部分同样需要暴力计算,不过可以进行取模运算了,不会出现非常大的数
第三部分n! >= phi(c) 并且n! % phi(c) == 0  这一部分就转化为了  n^phi(c) % c    然后就变成了(n % c) ^ phi(c) % c   那么就成了一个长度为c的循环节了

最后 需要特别注意的是,题目给的范围很大,需要用uLL, 并且答案有可能会超过uLL,因为当 c=1,b=0时,0到2^64-1都是符合条件的,所以需要特判
代码不再给出,也不是很难写


作者:sdj222555