码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-11-05 19:18:07      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:targe   view   解方程   ios   include   string   clu   tle   algo   


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 }
View Code

 

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

标签:targe   view   解方程   ios   include   string   clu   tle   algo   

原文地址:http://www.cnblogs.com/137shoebills/p/7788117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!