日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Applese 涂颜色(欧拉定理降幂+快速幂)

發(fā)布時(shí)間:2024/9/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Applese 涂颜色(欧拉定理降幂+快速幂) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鏈接:https://ac.nowcoder.com/acm/contest/330/E
來(lái)源:??途W(wǎng)

精通程序設(shè)計(jì)的 Applese 叕寫了一個(gè)游戲。

在這個(gè)游戲中,有一個(gè) n 行 m 列的方陣?,F(xiàn)在它要為這個(gè)方陣涂上黑白兩種顏色。規(guī)定左右相鄰兩格的顏色不能相同。請(qǐng)你幫它統(tǒng)計(jì)一下有多少種涂色的方法。由于答案很大,你需要將答案對(duì)
10
9
+
7
109+7 取模。


/*
這題容易發(fā)現(xiàn)規(guī)律,每一行有2種涂法(交叉式的涂),而跟有多少列沒(méi)有關(guān)系。
所以ans = 2^n%mod;
由于n特別大,所以這題重點(diǎn)就是高精度的計(jì)算。
高精度的 冪并且取模運(yùn)算 會(huì)想到用 歐拉定理降冪+快速冪。
對(duì)于歐拉定理,有個(gè)歐拉函數(shù)
定義:
在數(shù)論中,對(duì)于一個(gè)正整數(shù)n,歐拉函數(shù)是 小于等于n 的正整數(shù)中 與n互質(zhì)的數(shù) 的數(shù)目(φ(1)=1)。

關(guān)于歐拉函數(shù)與歐拉定理費(fèi)馬小定理的關(guān)系:

歐拉定理的公式理解:
對(duì)于互質(zhì)數(shù)a,m, a 的 m的歐拉值 次冪 對(duì)m取模 與 1對(duì)m取模 同余(三橫這里是同余的意思)
費(fèi)馬小定理可以看成歐拉定理的一種特殊情況,即m為質(zhì)數(shù),對(duì)m取模時(shí),m的歐拉值為m-1;
那么如何運(yùn)用歐拉定理來(lái)降冪呢?

我們用歐拉定理的特殊情況費(fèi)馬小定理來(lái)舉例:

2^100 % 7 = (2^(6*16)) * (2^4) % 7 =(1^16) * (2^4) % 7 = 2; 同樣上面那個(gè)例子套入降冪公式: A = 2; B =100; C = 7; 2^100 % 7 = 2^(100%φ(7)+ φ(7)) % 7; φ(7) = 6; 2^100 % 7 = 2^(100%6+ 6) % 7 = 2^(4+6) % 7 = 2^4 % 7 * 2^6 % 7 = 16%7*1 = 2;

與測(cè)試結(jié)果一致:


/
/
解題:
由于mod = 1e9 + 7,
是一個(gè)質(zhì)數(shù),所以對(duì)于本題來(lái)說(shuō)可以直接用費(fèi)馬小定理+快速冪
或者不管mod是不是質(zhì)數(shù)(沒(méi)有考慮到mod是不是質(zhì)數(shù)),用歐拉定理+快速冪;
冪指數(shù)n十分十分大,用前先結(jié)合同余定理處理
*/
ac_code(費(fèi)馬+快速冪):

#include <iostream> #include <string> #define ll long long const ll mod = 1e9+7; using namespace std; ll quickPow(ll a,ll b) {ll ans = 1;a %= mod;while(b){if(b&1) ans = (ans * a) % mod;a = a * a % mod;b >>= 1;}return ans; } int main() {string s1,s2;while(cin>>s1>>s2){ll length = s1.size(),n = 0,p;p = mod - 1;for(int i = 0; i < length; i++){n =(n * 10 + (s1[i] - '0')) % p;}cout<<quickPow(2,n)<<endl;}return 0; }

ac_code(歐拉+快速冪):

#include <iostream> #include <string> #define ll long long const ll mod = 1e9+7; using namespace std; ll quickPow(ll a,ll b) {ll ans = 1;a %= mod;while(b){if(b&1) ans = (ans * a) % mod;a = a * a % mod;b >>= 1;}return ans; } ll euler(ll n) {ll res = n;for(int i = 2; i*i <= n; i++){if(n % i == 0)res = res / i * (i-1);while(n%i==0)n /= i;}if(n > 1)res = res / n * (n-1);return res; } int main() {string s1,s2;while(cin>>s1>>s2){ll length = s1.size(),n = 0,p;//p = mod - 1;p = euler(mod);for(int i = 0; i < length; i++){n =(n * 10 + (s1[i] - '0')) % p;}cout<<quickPow(2,n)<<endl;}return 0; }

總結(jié)

以上是生活随笔為你收集整理的Applese 涂颜色(欧拉定理降幂+快速幂)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。