BZOJ_1408_[Noi2002]Robot_數學
阿新 • • 發佈:2018-04-28
out src true img 數學 http names jpg ont
2 1
3 2
5 1
6
75
Description
Input
Output
Sample Input
32 1
3 2
5 1
Sample Output
86
75
HINT
90號機器人有10個老師,加上它自己共11個。其中政客只有15號;軍人有3號和5號;學者有8個,它們的編號分別是:2,6,9,10,18,30,45,90。
$\sum\limits_{d|n}\mu(d)=n$
因此總和為n。
只需要求約數中$\mu$為1的$\varphi$和,$\mu$為-1的$\varphi$和。
這樣,我們每個質因子只有一次貢獻。
這次貢獻會把之前的$\mu$從1變到-1,從-1變到1。
又因為phi是積性函數,每次都需要乘上$\varphi(p)=p-1$。
要註意2不是奇質數。一個數的約數不考慮1。
代碼:
#include <stdio.h> #include <string.h> #include <algorithm> #include <stdlib.h> using namespace std; #define mod 10000 int n,m,p,k,f[1050],g[1050]; int qp(int x,int y) { int re=1; while(y) { if(y&1) re=re*x%mod; x=x*x%mod; y>>=1; } return re; } int main() { scanf("%d",&n); m=1; int i; f[0]=1; for(i=1;i<=n;i++) { scanf("%d%d",&p,&k); m=m*qp(p,k)%mod; if(p!=2) { f[i]=(f[i-1]+g[i-1]*(p-1)%mod)%mod; g[i]=(g[i-1]+f[i-1]*(p-1)%mod)%mod; }else { f[i]=f[i-1]; g[i]=g[i-1]; } } f[n]=(f[n]-1+mod)%mod; printf("%d\n%d\n%d\n",f[n],g[n],((m-f[n]-g[n]-1)%mod+mod)%mod); }
BZOJ_1408_[Noi2002]Robot_數學