概述
Calculation
Assume that f(0) = 1 and 0^0=1. f(n) = (n%10)^f(n/10) for all n bigger than zero. Please calculate f(n)%m. (2 ≤ n , m ≤ 10^9, x^y means the y th power of x).
2
24 20
25 20
16
5
题意:f(n) = (n%10)^f(n/10)计算f(n)
思路:a^x=a^(x%phi(c)+phi(c)) (mod c)
又是这个公式,对于这个公式只有在x>phi(c)的时候成立,之前没注意
和前面一个题目是非常类似的,uva10692,都是求a^b^c……%mod
递归求解
#include<iostream> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; #define ll long long //#define mod 1000000007 ll Oula(ll n) { ll ans=n; for(int i=2;i<=(double)sqrt(n*1.0);i++) { if(n%i==0) ans=ans*(1.0-1.0/i); while(n%i==0) n=n/i; } if(n>1) ans=ans*(1.0-1.0/n); return ans; } ll ppow(ll a, ll b, ll mod) { if(a>=mod) a=a%mod+mod; ll ans=1; while(b) { if(b&1) { ans=ans*a; if(ans>=mod) ans=ans%mod+mod; } a*=a; if(a>=mod) a=a%mod+mod; b>>=1; } return ans; } ll solve(ll n, ll m) { if(n==0) return 1; if(n<10) return n; ll p=Oula(m); ll temp=solve(n/10,p); return ppow(n%10,temp,m); } int main() { ll n,m; int t; cin>>t; while(t--) { cin>>n>>m; cout<<solve(n,m)%m<<endl; } return 0; }
最后
以上就是大胆水池为你收集整理的HDU2837 Calculation【指数循环节】的全部内容,希望文章能够帮你解决HDU2837 Calculation【指数循环节】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复