1.同模餘定理
定義所謂的同餘,顧名思義,就是許多的數被乙個數d去除,有相同的餘數。d數學上的稱謂為模。如a=6,b=1,d=5,則我們說a和b是模d同餘的。因為他們都有相同的餘數1。
應用(a+b)%c=(a%c+b%c)%c;--1
(a-b)%c=(a%c-b%c)%c;--2
(a*b)%c=(a%c*b%c)%c;--3
例題s(n)=n^5 求s(n)除以3的餘數
這裡的問題是用long long,n的5次冪會越界,所以可以用上面的公式3來進行運算。
2.最大公約數
int gcd(int a,intb)
int gdc(int a,intb) }
return
temp;
}
例題1給出n個正整數,任取兩個數分別作為分子和分母組成最簡真分數,程式設計求共有幾個這樣的組合。
就是求兩個數的最大公約數為1的個數
例題2分數化簡,同除以兩個數的最大公約數就可以了
3.最小公倍數(lcm)
lcm(x, y) = x * y / gcd(x, y)
4.斐波那契數列
f(n) = f(n-1) + f(n-2)
5.素數判定
只需要從2遍歷搭配sqrt(n)就行了
6.全排列
對字串進行全排列
方法1.使用next_permutation(start,end)
#includeusingnamespace
std;
intmain()next_permutation(s,s+len);
return0;
}
2.遞迴
終止條件:if(begin>=end) 輸出
permutation(arr,begin,end)=permutation(arr,begin+1,end)即乙個陣列的全排列等於它的所有子排列
#include usingnamespace
std;
void swap(int &a,int &b)
void permutation(int a,int s,int
e) cout
<}
else
}}int
main()
permutation(source,
0,count);
return0;
}
演算法筆記 數學問題
原題鏈結 原理 最大公約數 遞迴 歐幾里得演算法 最小公倍數 得到a,b的最大公約數d 最小公倍數 a d b include include intgcb int a,int b 求最大公約數 intmain printf d n d return0 include include include...
2018 6 18 數學問題
define crt secure no deprecate 求正整數n的質因數的個數。120 2 2 2 3 5 所以最後輸出時5 10 9 n至多只存在乙個大於sqrt n 的素因數 這裡只需要篩選到100000就可以 通過素數表,不斷試除,最後求出各個冪指數的和 include 素數表找到10...
2018 6 18 數學問題
2 4 3 8 2 3 3 對分母n 和分子 a進行因子分解後,找到其對應的冪指數相除結果最小的即為最後結果 對n!分解素因數 計算n 中將有幾個p因子ans 計算n p,有n p個整數可以向n 提供乙個p因子 ans n p 計算n p p 有n p p 個整數可以向n 提供兩個因子,相較於上乙個...