zoukankan      html  css  js  c++  java
  • hdu 5666 (大数乘法) Segment

    题目:这里

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

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

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

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 typedef long long ll;
     8 
     9 ll jjc(ll x,ll y,ll mod)
    10 {
    11     ll res=0;
    12     for ( ; y>0 ; y>>=1)
    13     {
    14         if (y&1) res=(res%mod+x%mod)%mod;
    15         x=(x%mod+x%mod)%mod;
    16     }
    17     return res;
    18 }
    19 
    20 int main()
    21 {
    22     int t;
    23     scanf("%d",&t);
    24     while (t--){
    25         ll q,p;
    26         scanf("%I64d%I64d",&q,&p);
    27         ll q1=q-1;ll q2=q-2;
    28         if (q1&1) q2/=2;
    29         else q1/=2;
    30         printf("%I64d
    ",jjc(q1,q2,p));
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    暑期测试训练3
    对于在线段树上修改整段区间的理解
    UVA 11090 判负圈问题
    ZOJ 2588 求割边问题
    POJ 1523 网络连通
    hdu 1163
    hdu 1703
    hdu 2577 模拟
    hdu 3836 强连通+缩点:加边构强连通
    hdu 2571
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/5764253.html
Copyright © 2011-2022 走看看