BZOJ 1408: [Noi2002]Robot

1408: [Noi2002]Robot

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 510  Solved: 344
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

3
2 1
3 2
5 1

Sample Output

8
6
75

HINT

90号机器人有10个老师,加上它自己共11个。其中政客只有15号;军人有3号和5号;学者有8个,它们的编号分别是:2,6,9,10,18,30,45,90。

Source

分析:

这道题读完题就胜利了...TAT...

其实就是用优(z)美(z)的语言描述了φ函数和μ函数...

需要注意的是φ(1)=0,数互异素数个数的时候不能数2...

ans1和ans2都很好求,因为φ是积性函数,所以我们可以O(n)滴求出...ans3肿么求QAQ...我思考了好久发现自己是zz...所有数的φ之和不就是m么...

减一减就好了...

代码:

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 //by NeighThorn
 6 using namespace std;
 7 //大鹏一日同风起,扶摇直上九万里 
 8 
 9 const int maxn=1000+5,Mod=10000;
10 
11 int n,beg,end,ans1,ans2,ans3,p[maxn],e[maxn];
12 
13 inline int power(int x,int y){
14     int res=1;
15     while(y){
16         if(y&1)
17             res=res*x%Mod;
18         (x*=x)%=Mod,y>>=1;
19     }
20     return res;
21 }
22 
23 signed main(void){
24     scanf("%d",&n);beg=1,end=n;
25     for(int i=1;i<=n;i++)
26         scanf("%d%d",&p[i],&e[i]);
27     if(p[1]==2)
28         beg++;
29     for(int i=beg;i<=end;i++){
30         int tmp1=ans1,tmp2=ans2;
31         (ans1+=tmp2*(p[i]-1)%Mod)%=Mod;
32         (ans2+=(tmp1+1)*(p[i]-1)%Mod)%=Mod;
33     }
34     ans3=1;
35     for(int i=1;i<=n;i++)
36         (ans3*=power(p[i],e[i]))%=Mod;
37     ans3=(((ans3-1+Mod)%Mod-ans1+Mod)%Mod-ans2+Mod)%Mod;
38     printf("%d\n%d\n%d\n",ans1,ans2,ans3);
39     return 0;
40 }//Cap ou pas cap. Cap.
View Code

By NeighThorn

转载于:https://www.cnblogs.com/neighthorn/p/6216829.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值