hdu 5666 (大数乘法) Segment

题目:这里

题意:在线段x+y=q与坐标轴围成的三角形中,求有多少个坐标为整数的点,答案模上p。

很容易就想到最后答案就是((q-1)*(q-2))/2然后模上p就是了,但是这个数字比较大,相乘会爆long long,于是用二进制的乘法,类似于快速幂,另外注意这个除以2得在

之前就处理了,因为最后答案一定要是个准确的整数。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long ll; ll jjc(ll x,ll y,ll mod)
{
ll res=;
for ( ; y> ; y>>=)
{
if (y&) res=(res%mod+x%mod)%mod;
x=(x%mod+x%mod)%mod;
}
return res;
} int main()
{
int t;
scanf("%d",&t);
while (t--){
ll q,p;
scanf("%I64d%I64d",&q,&p);
ll q1=q-;ll q2=q-;
if (q1&) q2/=;
else q1/=;
printf("%I64d\n",jjc(q1,q2,p));
}
return ;
}
上一篇:利用osql/ocmd批处理批量执行sql文件


下一篇:AEAI ESB V3.5.4开源发布,应用集成平台