JZYZOJ1378 [noi2002]M号机器人 欧拉函数

http://172.20.6.3/Problem_Show.asp?id=1378
日常懒得看题目怪不得语文差,要好好读题目了,欧拉函数大概是数论里最友好的了,不用解方程不用转换过来转换过去只需要简单乘在一起就可以了。
比较有趣的是求和的部分,因为类似于等比数列的性质,求全部的因数独立值的和竟然只需要快速幂然后最后去掉一个没有用的1(因为这个1是从头到尾没有乘上一个因数的)(具体见代码),非常神奇

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 const int maxn=1010;
 8 const int modn=10000;
 9 long long k;
10 long long a[maxn]={},b[maxn]={};
11 long long f[maxn][2]={};
12 long long pow(long long x,long long y){
13     long long z=1;
14     while(y){
15         if(y&1){z*=x;z%=modn;}
16         y/=2;x*=x;x%=modn;
17     }
18     return z;
19 }
20 int main(){
21     scanf("%I64d",&k);
22     int f1=0;
23     for(int i=1;i<=k;i++){
24         scanf("%I64d%I64d",&a[i],&b[i]);
25     }
26     f[0][0]=1;int nex=0;
27     for(int i=1;i<=k;i++){
28         if(a[i]==2)continue;
29         f[i][0]=f[nex][1]*(a[i]-1)+f[nex][0];f[i][0]%=modn;
30         f[i][1]=f[nex][0]*(a[i]-1)+f[nex][1];f[i][1]%=modn;
31         nex=i;
32     }long long cnt=1;f[k][0]-=1;
33     for(int i=1;i<=k;i++){
34         cnt*=pow(a[i],b[i]);cnt%=modn;
35     }cnt-=1;
36     cnt=(cnt-f[k][0]-f[k][1]+2*modn)%modn;
37     printf("%I64d\n%I64d\n%I64d\n",f[k][0],f[k][1],cnt);
38     return 0;
39 }

时间: 2024-10-12 10:54:39

JZYZOJ1378 [noi2002]M号机器人 欧拉函数的相关文章

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

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

BZOJ1408 NOI2002 Robot 快速幂+欧拉函数

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

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

[noi2002]M号机器人

3030年,Macsy正在火星部署一批机器人.第1秒,他把机器人1号运到了火星,机器人1号可以制造其他的机器人.第2秒,机器人1号造出了第一个机器人——机器人2号.第3秒,机器人1号造出了另一个机器人——机器人3号.之后每一秒,机器人1号都可以造出一个新的机器人.第m秒造出的机器人编号为m.我们可以称它为机器人m号,或者m号机器人. 机器人造出来后,马上开始工作.m号机器人,每m秒会休息一次.比如3号机器人,会在第6,9,12,……秒休息,而其它时间都在工作.机器人休息时,它的记忆将会被移植到当

找新朋友(欧拉函数)

找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8976    Accepted Submission(s): 4736传送门 Problem Description 新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的

HDU 1286 欧拉函数。

[科普]什么是BestCoder?如何参加? 找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8077    Accepted Submission(s): 4250 Problem Description 新年快到了,"猪头帮协会"准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是

欧拉函数hdu——————1286

现在先来解释下欧拉函数的的定义: 就是  正整数n里  小于N且与N互质(gcd为1)的数. (度娘:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等. 例如φ(8)=4,因为1,3,5,7均和8互质.) Problem Description 新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,

容斥原理、欧拉函数、phi

容斥原理: 直接摘用百度词条: 也可表示为 设S为有限集, ,则 两个集合的容斥关系公式:A∪B = A+B - A∩B (∩:重合的部分) 三个集合的容斥关系公式:A∪B∪C = A+B+C - A∩B - B∩C - C∩A +A∩B∩C 详细推理如下: 1. 等式右边改造 = {[(A+B - A∩B)+C - B∩C] - C∩A }+ A∩B∩C 2.文氏图分块标记如右图图:1245构成A,2356构成B,4567构成C 3.等式右边()里指的是下图的1+2+3+4+5+6六部分: 那

hdu 1286 找新朋友 (欧拉函数)

Description 新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来. Input 第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数. Output 对于每一个N,输出一行新朋友的人数,这样共有CN行输出