国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

ZOJ 3785 What day is that today? (費(fèi)馬小定理)

2019-11-08 19:38:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

題目大意

今天是周六,問(wèn)1^1 + 2^2 + 3^3 + … + N^N天后是周幾?(1<=N<=1000000000)

解題思路

第一眼看到題目天真的以為是快速冪取模的簡(jiǎn)單應(yīng)用,在飛速敲完代碼看到火紅的 TLE 之后意識(shí)到自己想多了,由于N的范圍達(dá)到了10^9,所以快速冪取模的方法行不通。

接下來(lái)就是使用萬(wàn)能打表A題法,但是由于本題中的循環(huán)數(shù)太大(294)導(dǎo)致在眼睛看瞎之前很有可能找不到循環(huán)點(diǎn)(反正我是沒(méi)有找到),既然打表也不靠譜,倒不如用數(shù)學(xué)的方式推導(dǎo)出公式。既靠譜又不傷眼睛。

首先我們關(guān)注公式中的單項(xiàng) N^N % 7 的值, 當(dāng) N 的值小于7時(shí),毫無(wú)疑問(wèn)底數(shù) N 有6種情況(1-6),當(dāng) N 的值大于7時(shí),可以得到 N=7 * k + b, 則

(7 * k + b)^N % 7 = (7 * K+B) % 7 * (7 * K + B)^ (N-1) % 7=b * (7 * K + B) ^ (N-1) % 7 ,經(jīng)過(guò)遞推最終可以得到

(7 * K + B)^N % 7 = B ^ N % 7** (0<=B<=6),根據(jù)費(fèi)馬小定理 在 gcd (A,P)=1 的條件下存在 A ^ (P-1)=1(mod P)。

在本題中 ,N % 7 !=0 時(shí),恒有 B^6 % 7 = 1 ,則 B^(6*K2+B2)=B ^ B2(0<=B2<=5)。當(dāng) N % 7==0 時(shí) , 毫無(wú)疑問(wèn) N^N%7==0 恒成立, 則 我們可以得出一個(gè)結(jié)論 N^N % 7的數(shù)值 共有 B * B2 =6 * 7=42種情況。但是此時(shí)求出的只是單項(xiàng)的循環(huán)結(jié),所以將結(jié)果再乘前綴和的循環(huán)結(jié)7即可得到最終的循環(huán)結(jié) 294 。


代碼

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long int ll;int ans[1001];ll quick(ll a,ll b,ll c){ ll ans=1; while(b) { a=a%c; ans=ans%c; if(b%2==1) ans=(ans*a)%c; b/=2; a=(a*a)%c; } return ans%c;}void init(){ ans[1]=1; for(int i=2;i<=294;i++){ ans[i]=(ans[i-1]+quick(i,i,7))%7; }}int main(){ ll t,sum; int n;init(); scanf("%lld",&t); while(t--) { sum=0; scanf("%d",&n); sum=ans[n%294]; if(sum==0)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 淄博市| 兰西县| 巢湖市| 健康| 山阳县| 华安县| 菏泽市| 波密县| 蒙城县| 洪泽县| 龙海市| 江西省| 宜都市| 宁海县| 温州市| 岫岩| 桦甸市| 渭源县| 乐平市| 崇左市| 永春县| 宽城| 肇源县| 和政县| 遵义市| 高雄县| 阿拉善右旗| 绥芬河市| 当涂县| 玉林市| 隆昌县| 渝北区| 屏山县| 沾化县| 会宁县| 吐鲁番市| 隆德县| 吉林省| 潼南县| 新丰县| 灵武市|