zoukankan      html  css  js  c++  java
  • 快速幂快速乘

    int ,long,long long的范围

    http://www.cnblogs.com/kuangbin/archive/2011/07/23/2115001.html

    unsigned   int   0~4294967295   
    int   2147483648~2147483647 
    unsigned long 0~4294967295
    long   2147483648~2147483647
    long long的最大值:9223372036854775807
    long long的最小值:-9223372036854775808
    unsigned long long的最大值:18446744073709551615

    __int64的最大值:9223372036854775807
    __int64的最小值:-9223372036854775808
    unsigned __int64的最大值:18446744073709551615

    快速幂:二进制

     1 ll fastpow(ll a, ll b, ll mod)
     2 {
     3     ll ans=1,temp=a%mod;
     4     while(b)
     5     {
     6         if(b&1) ans=(ans*temp)%mod;
     7         b>>=1;
     8         temp=temp*temp%mod;
     9     }
    10     return ans;
    11 }

    有时 a和b都很大,乘一次就可能爆long long ,此时要用快速乘。

    例如这题:http://acm.hdu.edu.cn/showproblem.php?pid=5187

     1 #include<cstdio>
     2 #include<cstring>
     3 #define ll long long
     4 ll fastmul(ll a,ll b,ll m)
     5 {
     6     ll ans=0,temp=a%m;
     7     while(b)
     8     {
     9         if(b&1) ans=(ans+temp)%m;
    10         b>>=1;
    11         temp=(temp*2)%m;
    12     }
    13     return ans;
    14 }
    15 ll fastpow(ll a,ll b,ll m)
    16 {
    17     ll ans=1,temp=a%m;
    18     while(b)
    19     {
    20         if(b&1) ans=fastmul(ans,temp,m);
    21         b>>=1;
    22         temp=(fastmul(temp,temp,m));
    23     }
    24     return ans;
    25 }
    26 
    27 int main()
    28 {
    29     ll x,p;
    30     while(scanf("%lld%lld",&x,&p)!=EOF)
    31     {
    32         if(x==1)
    33         {
    34             if(p==1) puts("0");
    35             else puts("1");
    36         }
    37         else
    38         printf("%lld
    ",(fastpow(2,x,p)-2+p)%p);
    39     }
    40 }
  • 相关阅读:
    数据库 连接(join)
    Linux top
    Game2048
    黑豆白豆问题
    1000个苹果10箱
    Jconsole
    八数码 Java实现
    两数之和
    磁盘调度算法
    常见应用网络层次
  • 原文地址:https://www.cnblogs.com/yijiull/p/6641695.html
Copyright © 2011-2022 走看看