NOI第一题求讨论两个int64相乘的超界处理
noip吧
全部回复
仅看楼主
level 9
wangdebao2008 楼主
如题
开了个real结果在trunc的时候207了
结果也不对劲
2012年07月31日 13点07分 1
level 9
wangdebao2008 楼主
首先用的是两个int64相乘 爆了
其次用的是两个inc64相乘
function clc(a,b:int64):int64;
varw1,w2,r,m,tt:double;
beginm:=xm;
w1:=a;w2:=b;
tt:=w1*w2;
r:=trunc(tt/m);
tt:=tt-m*r;
a:=trunc(tt);
exit(a);
end;
但是会出现207错误 求分析
2012年07月31日 13点07分 2
level 9
wangdebao2008 楼主
难道一定要用高精么><
2012年07月31日 13点07分 3
level 12
为什么不用同余定理呢?
function clc(a,b:int64):int64;
begin
exit(((a mod g)*(b mod g))mod g);
end;
2012年07月31日 13点07分 4
level 6
快速乘。
int64 mul(int64 x,int64 y){ int64 res=0; for(;y;y>>=1,x=(x+x)%mod)if(y&1)res=(res+x)%mod; return res;}
2012年07月31日 13点07分 5
level 13
同余
类似于乘法分配律,把mod放到每一项上
2012年07月31日 14点07分 6
level 9
wangdebao2008 楼主
我的算法可能有问题吧
我是在运算的时候一直用的mod m而不是g,g是最后mod的
2012年07月31日 14点07分 7
level 9
wangdebao2008 楼主
快速幂已使用,处理的是a*b的结果
2012年07月31日 14点07分 9
level 9
wangdebao2008 楼主
谢谢大家,已懂。
明天二试RP++
2012年07月31日 14点07分 10
1