ACM模板——取模

const ll mod = 1000000007;
ll mult_mod(ll a,ll b) //(a*b)%mod a,b,mod<2^63
{
    a %= mod;
    b %= mod;
    ll ans=0;
    while(b)
    {
        if(b&1)
        {
            ans=ans+a;
            if(ans>=mod)
            ans=ans-mod;
        }
        a=a<<1;
        if(a>=mod) a=a-mod;
        b=b>>1;
    }
    return ans;
}

积取模

const ll mod = 1000000007;
ll pow_mod(ll a,ll b) // a^b%mod
{
    ll ans=1;
    a=a%mod;
    while(b)
    {
        if(b&1)
        {
            ans=mult_mod(ans,a);
        }
        a=mult_mod(a,a);
        b=b>>1;
    }
    return ans;
}

次方取模

原文地址:https://www.cnblogs.com/Asurudo/p/10743759.html

时间: 2024-10-09 05:11:26

ACM模板——取模的相关文章

大组合数取模之lucas定理模板,1&lt;=n&lt;=m&lt;=1e9,1&lt;p&lt;=1e6,p必须为素数

typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数 输入:C(n,m)%p 调用lucas(n,m,p) 复杂度:min(m,p)*log(m) ***********************************/ //ax + by = gcd(a,b) //传入固定值a,b.放回 d=gcd(a,b), x , y

CodeForces 450B (矩阵快速幂模板题+负数取模)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51919 题目大意:斐波那契数列推导.给定前f1,f2,推出指定第N项.注意负数取模的方式:-1%(10^9+7)=10^9+6. 解题思路: 首先解出快速幂矩阵.以f3为例. [f2]  * [1 -1] = [f2-f1]=[f3]  (幂1次) [f1]  * [1  0]     [f2]      [f2] 于是fn=[f2] *[1 -1]^(n-2)

模板 快速幂取模

[模板]快速幂取模 1 long long quickmod(long long a,long long b,long long m) 2 { 3 long long ans = 1; 4 while(b)//用一个循环从右到左便利b的所有二进制位 5 { 6 if(b&1)//判断此时b[i]的二进制位是否为1 7 { 8 ans = (ans*a)%m;//乘到结果上,这里a是a^(2^i)%m 9 b--;//把该为变0 10 } 11 b/=2; 12 a = a*a%m; 13 } 1

【模板】快速幂取模

快速幂取模的模板,要注意所有变量都要开成long long类型的防溢出: #include<cstdio> #include<algorithm> #include<cstring> typedef long long LL; const LL mod=1e9+7; using namespace std; LL a,b; LL mi(LL x,LL y) { LL res=1; while(y){ if(y&1) res=res*x%mod; y>>

HDU ACM 5214 Movie -&gt;贪心+自然溢出取模-&gt;水题里的学问

分析:贪心,首先找到最右边的第一个左边界和最左边的第一个右边界.之后在判断是否有一个及一个以上的区间在这两个值之间,若有则能找到符合题意的三个区间,否则不能. 注意:这里利用的unsigned int的自然溢出决解了取模问题:第二个是一定生成完数据后在交换Li和Ri的值,这里被坑残了. #include<iostream> using namespace std; //__int64 mod=4294967296;由于4294967296-1刚好是unsigned int类型的最大值,对它取模

hdu 3037 Saving Beans 组合数取模模板题。。

Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2707    Accepted Submission(s): 1014 Problem Description Although winter is far away, squirrels have to work day and night to save b

快速幂取模算法【模板】

快速幂取模其实是a^b%c,这就是著名的RSA公钥加密的方法,当a,b都很大的时候,直接求是不可取的,所以就用到了快速幂取模. 首先你得明白他的原理,其实是用到了二分的思想,把b按照二进制展开 b = p(n)*2^n  +  p(n-1)*2^(n-1)  +-+   p(1)*2  +  p(0).其中p(i) (0<=i<=n)为 0 或 1. 所以此时a^b =  a^ (p(n)*2^n  +  p(n-1)*2^(n-1)  +...+  p(1)*2  +  p(0))=  a^

ACM 取模

取模公式: (a+b) mod n=((a mod n)+(b mod n))%n (a-b) mod n=(a mod n -b mod n +n)mod n a*b mod n =(a mod n)*(b mod n)mod n 1大整数取模:输入n,m求n%m,其中n<=10^1000000,m<=10^9 ? 1 2 3 4 5 6 7 8 //大整数取模 int big_number_mod(char *str, int m){     int len = strlen(str),

【libreOJ模板】并查集(输入挂,取模与find优化)

1.了解了各种输入挂性orz,找到了一个合适的 2.find用while写能快一倍,并且能被数据卡掉 3.取模只能快十几毫秒,但也能被数据卡掉 取模find双优化是1997mm过的 再加一个性价比较高的输入挂是438mm  23333 #include <cstdio> #include <cmath> #include <complex> #include <algorithm> #include <iostream> #include<