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.



By NeighThorn

时间: 2024-08-02 11:02:00

BZOJ 1408: [Noi2002]Robot的相关文章

bzoj 1408 [Noi2002]Robot(欧拉函数)

[题目链接]  http://www.lydsy.com/JudgeOnline/problem.php?id=1408 [题意] 求m的所有约数中,满足可以分解成(奇数个不同素数/偶数个不同素数/其他)的所有的phi之和. [思路] ans1表示目前为止有偶数个奇质因子的欧拉函数的前缀和 ans2表示目前为止有奇数个奇质因子的欧拉函数的前缀和. 注意2不是奇质因子,需要去掉. 第三种可以由m-1减去前两种,减1为去掉1,1不是老师. [代码] 1 #include<cstdio> 2 #in

BZOJ 1408 NOI2002 Robot 数论

题目大意:- -我不行了自己看 逗比题- - 用了这么大篇幅来讲述什么是φ和μ- - 不过不是普通的φ和μ,有些变形- - 新定义的φ(1)=0,新定义的μ只计算奇质数,含有2为因子的数都按照μ值为零处理 我们首先求出第一问和第二问,即μ值不等于0的部分 由于μ的定义,μ值不等于0当且仅当每个质因数的次数都是1次 因此我们枚举每个奇质数 计算加上这个奇质数之后φ值之和多出来的部分 由于φ是积性函数 所以前两问可以在O(n)时间内出解 第三问可以用总答案减掉前两问的答案 由于Σ[d|n]φ(d)=

1408: [Noi2002]Robot|快速幂|欧拉函数

真是一道神题,语文渣渣表示已经给题意描述跪烂了.. 独立数显然就是欧拉函数φ 然后政客军人他们的分解成的奇素数的指数显然都是1,最初的思想就是暴力枚举只有1个奇函数的情况,2个,3个----这样显然是会超时,可以发现欧拉函数是满足积性的,所以可以放到一起乘起来算用一种类似于DP的"前缀和"的思想来做 ans1表示当前有奇数个奇数质因子的"前缀和" ans2表示当前有偶数个奇数质因子的"前缀和" 然后学者的独立数可以用总和减去前两个的和,因为欧拉函

【BZOJ1408】[Noi2002]Robot DP+数学

[BZOJ1408][Noi2002]Robot 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. 题解:语文题,就是问你n的约数中μ(d)=0,1,-1时,φ(d)的和,其中令μ(1)=0,φ(2)=0 直接DP,令f[i][0/1]

BZOJ 1407: [Noi2002]Savage( 数论 )

枚举答案, 然后O(N^2)枚举野人去判他们是否会在有生之年存在同山洞. 具体做法就是: 设第x年相遇, 则 Ci+x*Pi=Cj+x*Pj (mod M), 然后解同余方程. 复杂度应该是O(ans*N^2log(ans)), 但是实际远小于....能够AC -------------------------------------------------------------------- #include<cstdio> #include<algorithm> #inclu

BZOJ1408 NOI2002 Robot 快速幂+欧拉函数

题意:分别求所有质因数都不同且质因数个数为奇数个.偶数个的数的欧拉函数和,和质因数存在重复的数的欧拉函数和 题解: 说书题……前面一大串就是用一种比较有趣的语言定义欧拉函数. 显然我们只需要求出所有军人ans1和政客ans2,然后用求得的M减去独立数和就是学者的独立数和了. 由于善良的出题人已经帮我们把M给质因分解了,因此我们假定当前已经得到了ans1和ans2,那么根据欧拉函数的定义,ans1'=ans1+ans2*(p-1),ans2'=ans2+ans1*(p-1),因为新加入的质因子会让

bzoj 1407 [Noi2002]Savage

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 因为答案有很小的限制,所以可以枚举.(听说不能二分?) T*p[ i ] + c[ i ] = T*p[ j ] + c[ j ](mod m) <==>T*(p[ i ] - p[ j ]) + k * m = c[ j ] - c[ i ] 然后需要打一个正确的板子. 放一点笔记: exgcd有解,仅当得数是gcd的倍数.这样可以求出特解后同乘一个数得到解.ax+by=c的通解

读贾志鹏《线性筛法与积性函数》笔记

1.欧拉筛法在线性时间内求素数以及欧拉函数 代码: 1 procedure get; 2 var i,j,k:longint; 3 begin 4 tot:=0; 5 fillchar(check,sizeof(check),false); 6 for i:=2 to n do 7 begin 8 if not(check[i]) then 9 begin 10 inc(tot); 11 p[tot]:=i; 12 fai[i]:=i-1; 13 end; 14 for j:=1 to tot

【BZOJ】【3205】【APIO2013】机器人robot

斯坦纳树 好神啊……Orz zyf && PoPoQQQ 为啥跟斯坦纳树扯上关系了?我想是因为每个点(robot)都沿着树边汇到根的时候就全部合起来了吧= =这个好像和裸的斯坦纳树不太一样,那个是无向最小生成树,这个是有向图…… 引用题解: 令f[l][r][i][j]表示在点(i,j)将编号在[l,r]区间内的机器人全部合并的最小推动次数 则有动规方程组: f[l][r][i][j]=min{f[l][r][_i][_j]+1} ( (_i,_j)->(i,j) ) f[l][r]