| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
关于这道题,请教大侠一个问题?1.根据题目要求是求出phi(m)的最小因子i是的10^i≡1 (mod m),
这里m=(9*L) /gcd(9*L,8) ),phi是欧拉函数;L<=2*10^9;
首先第一个问题就是有可能m求出来范围达到1.8*10^10这么大,
当枚举1~sqrt(m)范围内m的因子时,要检验10^i(mod m)是否是1,
在用二进制的方式求10^i(mod m)时,
我用代码如下:计算a^b mod n (bits[]用来存储b的二进制形式)
int k;
unsigned __int64 c,d;
k=0;
while(b)
{
bits[k++]=b&1;
b>>=1;
}
k--;
c=0;
d=1;
while(k>=0)
{
c<<=1;
d=(d*d)%n;
if(bits[k])
{
c++;
d=(d*a)%n;
}
k--;
}
return d;
上面的代码用来计算10^i mod( m)时,由于m会大到1.8*10^10,所以若在某次循环时若d也接近1.8*10^10时,就会溢出unsigned __int64 了,这里就不知道怎么处理了,
不知道时候要用高精度,或者这种可以用浮点数如double的方式,保存d*d,来求模m?
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator