高次方取模(template)
就是求(a^b)% p ,a,b,p比較大
取餘公式:(a*b)%p=(a%p*b%p)%p
演算法核心就是下面兩個公式:
//次方求模模板
template<class Type>
inline Type ModPow(Type m,Type n,Type p) //m的n次方模p
{
if(n==0) return 1;
if (n==1) return m%p;
Type tmp=ModPow(m,n>>1,p);
return (tmp*tmp%p)*((n%2?m:1)%p)%p;
}
//REF:[C小加](http://www.cppblog.com/cxiaojia/archive/2012/04/06/170268.html)
/*高次方求模:
比如a的b次方對c求模
我們可以把b 化為二進位制形式看那一位有1
比如b=10101則 a^b=a^(10000)*a^(100)*a^(1)
以函式形式體現:*/
template<class Type>
inline Type han()
{
Type t,s;
for(t=a,s=1;b;b>>=1,t*=t,t%=c)//用b>>=1檢視b中1
if(b&1){s*=t;s%=c;}
return s%c;
}
//REF:[知行執行](http://www.cnblogs.com/zhixingqiezhixing/archive/2012/02/18/2356655.html )
btw , 大數取模的模板
取餘公式:(a+b)%p=(a%p+b%p)%p;
char big_number[MAX];
template<class type>
type big_mod(char *a,type mod){
type len=strlen(a),result=0;
for(int i=0;i<len;i++){
result=((result*10)%mod+(a[i]-'0')%mod)%mod;
//如果資料不算太大,可以寫成這樣來節省時間result=(result*10+a[i]-'0')%mod;
}
return result;
}
//test
char s[200];
int main()
{ while(gets(s))
cout<<big_mod<int>(s,2)<<endl;
}
相關推薦
高次方取模(template)
就是求(a^b)% p ,a,b,p比較大 取餘公式:(a*b)%p=(a%p*b%p)%p 演算法核心就是下面兩個公式: //次方求模模板 template<class Type>
除數為2的N次方取模可以用與運算替代,效率更高
取模運算在包括JAVA在內的大多數語言中的效率都十分低下,而當除數為2的N次方時,取模運算將退化為最簡單的位運算,其效率明顯提升(按照Bruce Eckel給出的資料,大約可以提升5~8倍) 。看看JDK中是如何實現的: Java程式碼: staticint ind
ac數論之n次方取模
傳送門次方求模時間限制:1000 ms | 記憶體限制:65535 KB難度:3描述求a的b次方對c取餘的值輸入第一行輸入一個整數n表示測試資料的組數(n<100)每組測試只有一行,其中有三個正整數a,b,c(1=<a,b,c<=1000000000)輸
高次方求模
有了這個公式,求解問題就簡單了,n的p次方很容易拆分為幾個數相乘的形式。其中採用二分法拆分較為簡單高效。 遞迴: #define M 10003 int PowMod(int n, int
2017湘潭賽 A題 Determinant (高斯消元取模)
mina while 代數 tor mod continue 高斯消元 problem 元素 鏈接 http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1260 今年湘潭的A題 題意不難 大意是把n*(n
數學之高冪次取模
大神 bsp alt ron mage str 博客 htm com 盜自倉鼠大神博客:http://www.cnblogs.com/linyujun/p/5194170.html 用於解決(a^b)%p類問題,當b很大時 好像運用到費馬小定理,不會證明 φ(
【2018icpc焦作網路賽 Save the Room】【組合數【隔板法】【高次冪取模】
【連結】 【題意&思路】 把一個數拆分成一個數的和求方法數。 比如 4=1+1+1+1=1+1+2=2+2=1+3=4 相當於有(n-1)個空插隔板,方法數即為2^(n-1). 【程式碼】 #include<bits/stdc++.h>
求N的N次方(快速冪取模)
分治演算法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。 例題:給定一個整數N(N<=1 000 000 000),求N的N次方的最後一個數字。 首先,暴力的時間複雜度為O(N),對於較大的N顯然太慢。所以我們選取快
高次冪取模 (快速冪取模)
來自百度文庫 PPT作者 張鵬 只能說下載分數太貴了。。 基本概念及思想 ¡對形如a^b mod m 的運算(b一般較大) ¡但a,b,m都在long型範圍內 ¡演算法的主要思想是分治,分而治之。將大的問題分成若干個相似的較小的問題! ¡具體實現是用遞迴的方法! 舉例
求大數的n次方對m取模(尤拉降冪)
博主連結 #include <stdio.h> #include <bits/stdc++.h> using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; cons
hdu3364-高斯消元(取模)
列n個方程,表示每個燈會被哪些開關控制, 得到一個一個n*m的矩陣,最後一列為所要求的狀態 則對這個(n+1)*(m)的矩陣高斯消元,得到方案數,答案爆int #include <cstdio> #include <cmath> #inclu
計蒜客 Give Candies (2的高次冪取模)
題目意思 大數輸入,求2的n-1次方 解題思路 2的n次方對mod取模會產生mod/2的迴圈,所以在大數陣列轉換成LL的時候取模要用mod/2,如果直接用mod在1e9+8時候出錯。不
poj 2065 高斯消元取模解方程組
題意: a0*1^0 + a1*1^1+a2*1^2+........+an-1*1^(n-1) = f(1) a0*2^0 + a1*2^1+a2*2^2+........+an-1*2^(n-1) = f(2) ...... a0*n^0 + a1*n^1+a
CSU - 1556 Jerry's trouble(高速冪取模)
click ostream algo printf 高速 ron main 取模 bit 【題目鏈接】:click here 【題目大意】:計算x1^m+x2^m+..xn^m(1<=x1<=n)( 1 <= n < 1 000 000, 1 &
求第n行楊輝三角(n很大,取模
int 為什麽不能 style code 為我 max sin clas pan 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 typedef
取模運算
add 結合 重要 nbsp left 但是 list padding 四則運算 腦子不好使,老是記不住(?_?),備忘一下。 模運算與基本四則運算有些相似,但是除法例外。其規則如下: (a + b) % p = (a % p + b % p) % p (a -
UVa 11582 Colossal Fibonacci Numbers! 【大數冪取模】
term sign fontsize name fib sep iss style watermark 題目鏈接:Uva 11582 [vjudge] 題意 輸入兩個非負整數a、b和正整數n(0<=a,b<=2^64,1<=n<=1000
HihoCoder 1153 分數取模
了吧 利用 phi %d hiho 單點 但是 輸入 nbsp 時間限制:1000ms 單點時限:10000ms 內存限制:256MB 描述 給定三個正整數 a、 b 和 p,滿足 b 和 p 互質。這時分數 a / b 除以 p 的余數,即 a / b MOD p 可以定
id取模分表
bsp _id user 用戶 用戶id 取模 場景 nbsp var 場景 1 假設按用戶id分2個庫 每個庫分10張表。 分表策略 1.用戶id%2 確定庫 用戶id%3確定表。 2.(用戶id%(2*10))/ 10 取整確定庫,(用戶id%(2*10)%
ACM 取模
防止 .com 大整數取模 for man 分治算法 dex cin ima 取模公式: (a+b) mod n=((a mod n)+(b mod n))%n (a-b) mod n=(a mod n -b mod n +n)mod