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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jzoj1161-机器人M号【欧拉函数,dp】

發(fā)布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jzoj1161-机器人M号【欧拉函数,dp】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正題


大意

因為題目比較gou,所以就直接放題目了

機器人1號可以制造其他的機器人。 第2秒,機器人1號造出了第一個機器人——機器人2號。 第3秒,機器人1號造出了另一個機器人——機器人3號。 之后每一秒,機器人1號都可以造出一個新的機器人。第m秒造出的機器人編號為m。我們可以稱它為機器人m號,或者m號機器人。 機器人造出來后,馬上開始工作。m號機器人,每m秒會休息一次。比如3號機器人,會在第6,9,12,……秒休息,而其它時間都在工作。 機器人休息時,它的記憶將會被移植到當時出生的機器人的腦中。比如6號機器人出生時,2,3號機器人正在休息,因此,6號機器人會收到第2,3號機器人的記憶副本。我們稱第2,3號機器人是6號機器人的老師。 如果兩個機器人沒有師徒關(guān)系,且沒有共同的老師,則稱這兩個機器人的知識是互相獨立的。注意:1號機器人與其他所有機器人的知識獨立(因為只有1號才會造機器人),它也不是任何機器人的老師。 一個機器人的獨立數(shù),是指所有編號比它小且與它知識互相獨立的機器人的個數(shù)。比如1號機器人的獨立數(shù)為0,2號機器人的獨立數(shù)為1(1號機器人與它知識互相獨立),6號機器人的獨立數(shù)為2(1,5號機器人與它知識互相獨立,2,3號機器人都是它的老師,而4號機器人與它有共同的老師——2號機器人)。 新造出來的機器人有3種不同的職業(yè)。對于編號為m的機器人,如果能把m分解成偶數(shù)個不同奇素數(shù)的積,則它是政客,例如編號15;否則,如果m本身就是奇素數(shù)或者能把m分解成奇數(shù)個不同奇素數(shù)的積,則它是軍人,例如編號 3, 編號165。其它編號的機器人都是學(xué)者,例如編號2, 編號6, 編號9。 第m秒誕生的機器人m號,想知道它和它的老師中,所有政客的獨立數(shù)之和,所有軍人的獨立數(shù)之和,以及所有學(xué)者的獨立數(shù)之和。可機器人m號忙于工作沒時間計算,你能夠幫助它嗎? 為了方便你的計算,Macsy已經(jīng)幫你做了m的素因子分解。為了輸出方便,只要求輸出總和除以10000的余數(shù)。


解題思路

首先一個機器人m的獨立數(shù)是φ(m)\varphi(m)φ(m)而老師的數(shù)量就是他的因數(shù)數(shù)量-2,然后把M分解為
p1e1×p2e2×p3e3...×pkekp1^{e1}\times p2^{e2}\times p3^{e3}...\times pk^{ek}p1e1×p2e2×p3e3...×pkek
然后
φ(m)=p1e1×p2e2...×pkek×(1?1p1)×(1?1p2)...×(1?1pk)\varphi(m)=p1^{e1}\times p2^{e2}...\times pk^{ek}\times (1-\frac{1}{p1})\times (1-\frac{1}{p2})...\times (1-\frac{1}{pk})φ(m)=p1e1×p2e2...×pkek×(1?p11?)×(1?p21?)...×(1?pk1?)
之后
φ(m)=(p1?1)p1e1?1×(p2?1)p2e2?1...×(pk?1)pkek?1\varphi(m)=(p1-1)p1^{e1-1}\times (p2-1)p2^{e2-1}...\times (pk-1)pk^{ek-1}φ(m)=(p1?1)p1e1?1×(p2?1)p2e2?1...×(pk?1)pkek?1
然后我們就可以發(fā)現(xiàn)政客的獨立數(shù)就是在M的奇質(zhì)因數(shù)中選擇偶數(shù)個不同的乘起來的歐拉函數(shù),軍人就是選奇數(shù)個。然后學(xué)者就是M所以的獨立數(shù)減去政客和軍人。
選數(shù)我們可以用dp
f[imod2][0]f[i\ mod\ 2][0]f[i?mod?2][0]表示在M因子中只包含前i個的政客的歐拉函數(shù)
f[imod2][1]f[i\ mod\ 2][1]f[i?mod?2][1]表示在M因子中只包含前i個的政客的歐拉函數(shù)
然后進行動態(tài)轉(zhuǎn)移
f[imod2][0]=f[(i+1)mod2][0]+f[(i+1)mod2][1]?(p?1)f[i\ mod\ 2][0]=f[(i+1)\ mod\ 2][0]+f[(i+1)\ mod\ 2][1]*(p-1)f[i?mod?2][0]=f[(i+1)?mod?2][0]+f[(i+1)?mod?2][1]?(p?1)
f[imod2][1]=f[(i+1)mod2][1]+f[(i+1)mod2][0]?(p?1)f[i\ mod\ 2][1]=f[(i+1)\ mod\ 2][1]+f[(i+1)\ mod\ 2][0]*(p-1)f[i?mod?2][1]=f[(i+1)?mod?2][1]+f[(i+1)?mod?2][0]?(p?1)
最后計算φ(m)\varphi(m)φ(m)減去最后的政客獨立數(shù)總和和軍人獨立數(shù)總和


代碼

#include<cstdio> #define mods 10000 using namespace std; int n,p,e,f[2][2],m=1; int ksm(int x,int k)//快速冪 {int ans=1;while (k){if (k&1) ans=(ans*x)%mods;x=x*x%mods;k/=2;}return ans; } int main() {scanf("%d",&n);scanf("%d%d",&p,&e);m=m*ksm(p,e)%mods;if (p==2) f[1][0]=1;else{f[0][0]=1;f[1][0]=(f[0][0]+f[0][1]*(p-1)%mods)%mods;f[1][1]=(f[0][1]+f[0][0]*(p-1)%mods)%mods;}//初始化(sro xjqのdalao orz)for (int i=2;i<=n;i++){scanf("%d%d",&p,&e);m=m*ksm(p,e)%mods;f[i&1][0]=(f[~-i&1][0]+f[~-i&1][1]*(p-1)%mods)%mods;f[i&1][1]=(f[~-i&1][1]+f[~-i&1][0]*(p-1)%mods)%mods;//動態(tài)轉(zhuǎn)移}f[n&1][0]--;m=((m-1-f[n&1][0]-f[n&1][1])%mods+mods)%mods;//計算學(xué)者printf("%d\n%d\n%d",f[n&1][0],f[n&1][1],m); } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的jzoj1161-机器人M号【欧拉函数,dp】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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