HDU 5666 快速就乘

来源:互联网 发布:linux $$ 编辑:程序博客网 时间:2024/06/15 15:34

题意:给以一条x+y=q的直线问,在其与xy轴构成的三角形中,有多少个整数点在里面。


想法:简单数学题,根据等差数列,可以得到公式:1+(q-3)*q/2,这就是答案,主要是q太大了,所以用快速乘,其实就和快速幂差不多。


#include<iostream>#define ll long longusing namespace std;ll q,P;ll cheng(ll x,ll y){    ll res=0;    while(y)    {        if(y&1)         {            res=(res+x)%P;        }        x=(2*x)%P;        y/=2;     }    return res;}int main(){    int t;    cin>>t;    while(t--)    {        cin>>q>>P;        if(q<=2)        {            cout<<"0"<<endl;            continue;         }         cout<<cheng(q,(q-3)/2)+1<<endl;    }    return 0;}


0 0
原创粉丝点击