[微信机器人_04]自然语言处理简单实现

时间:2014-01-21 10:18:41   收藏:0   阅读:619

对于两个正整数bubuko.com,布布扣,由欧拉定理可知,存在正整数bubuko.com,布布扣, 比如说欧拉函数bubuko.com,布布扣,即小于等于 m 的正整数中与 m 互质的正整数的个数,使得bubuko.com,布布扣

由此,在bubuko.com,布布扣时,定义bubuko.com,布布扣对模bubuko.com,布布扣的指数bubuko.com,布布扣为使bubuko.com,布布扣成立的最小的正整数bubuko.com,布布扣。由前知bubuko.com,布布扣 一定小于等于 bubuko.com,布布扣,若bubuko.com,布布扣,则称bubuko.com,布布扣是模bubuko.com,布布扣的原根

摘自维基百科


这个题目就是要求一个质数n的最大的原根

现在的问题就是怎么求原根,如果直接暴力是 O(nlogn * 因子数),显然是不行的。。

方法:

如果q不是n的原根,那么必然存在一个t < n-1且 q^t = 1(mod n),这里我就假设q^t = 1(mod n), t肯定是整除n-1的(想想就明白)

根据裴蜀定理可知ax+by=gcd(a,b)必然有解

所以必然存在tx + (n-1)y = gcd(t, n-1),所以q^(tx) = 1 = q^( -(n-1)y + gcd(t, n-1)) = q^( gcd(t, n-1) ) ,即q^( gcd(t, n-1) ) = 1

因为t < n-1 且t 整除n-1,所以 t 至少整除 (n-1)/pi (1 <= i <=  tot)中的一个,pi为n-1的素因子

所以要判断q是不是n的原根,只需要判断 q^( (n-1)/pi ) % n 其中如果有一个等于1的话,那q就不是原根!


代码:


原文:http://blog.csdn.net/elcarim/article/details/18527575

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!