【牛客 -330E 】Applese 涂颜色(费马小定理,超级快速幂)
生活随笔
收集整理的這篇文章主要介紹了
【牛客 -330E 】Applese 涂颜色(费马小定理,超级快速幂)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題干:
?
精通程序設計的 Applese 叕寫了一個游戲。
在這個游戲中,有一個 n 行 m 列的方陣。現在它要為這個方陣涂上黑白兩種顏色。規定左右相鄰兩格的顏色不能相同。請你幫它統計一下有多少種涂色的方法。由于答案很大,你需要將答案對 109+7109+7 取模。
輸入描述:
僅一行兩個正整數 n, m,表示方陣的大小。輸出描述:
輸出一個正整數,表示方案數對 109+7109+7 取模。示例1
輸入
復制
1 1輸出
復制
2示例2
輸入
復制
2 2輸出
復制
4備注:
1≤n,m≤10^100000解題報告:
? ?這題解法很多,FZU - 1759類似的原題。
AC代碼:(phthon版)
def qpow(a,b,c):a=a%cans=1while b!=0:if b&1:ans=(ans*a)%cb>>=1a=(a*a)%creturn ans x = list(map(int, input().strip().split())) print(qpow(2,x[0]%(1000000006),1000000007))AC代碼2:(phthon版)
print(pow(2,int(input().split()[0]),10**9+7))所以pow函數內部是跨粟米實現的???不明白23333
?
AC代碼3:(費馬小定理 + 指數循環節)
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5; const ll mod=1000000007; char s[MAX],s1[MAX]; ll qpow(ll a,ll k) {ll res = 1;while(k) {if(k&1) res=(res*a)%mod;a=a*a%mod;k>>=1;}return res; } ll euler(int n) { int res=n,a=n;for(int i=2; i*i<=a; i++) {if(a%i==0) {res=res/i*(i-1);while(a%i==0) a/=i;}}if(a>1) res=res/a*(a-1);return res; } int main() {int n,m;ll c = euler(mod);//1e9+6ll b=0;scanf("%s",s);scanf("%s",s1);int len=strlen(s); // for(int i=len-1; i>=0; i--) { // if(s[i]=='0') s[i]='9'; // else { // s[i]=s[i]-1;break; // } // }for(int i=0; i<len; i++) {b=b*10+s[i]-'0';b=b%c;}cout << qpow(2,b+c) <<endl;return 0; }注釋掉的那一部分可以當成一個小板子、、目的在于給一個字符串存下的整數執行 -1 操作。
總結
以上是生活随笔為你收集整理的【牛客 -330E 】Applese 涂颜色(费马小定理,超级快速幂)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小哥凭“量子速读”绝技吸粉59万:看街景
- 下一篇: smagent.exe - smagen