链接:https://ac.nowcoder.com/acm/contest/5669/B
来源:牛客网
题意:给了两个正整数,求在给出函数情况下的值
solution:
因为求的是max,就是使递归的次数尽可能多,因此就是每次x除以一个质数因子,这样才能使函数值尽可能大。经过分析可知,就是将给你的n分解成若干个质数因子,根据质数因子的个数得出c的个数
#include<bits/stdc++.h> using namespace std; #define ll long long typedef pair<int,int>P; #define INF 0x3f3f3f3f ll n,c,t; const int mod=1e9+7; ll prime[1000005],not_prime[1000005],num=0; int main() { not_prime[1]=1; for(int i=2;i<=1000000;i++) { if(!not_prime[i]) { prime[num++]=i; for(int j=2*i;j<=1000000;j+=i) not_prime[j]=1; } } cin>>t; while(t--) { scanf("%lld%lld",&n,&c); ll s=1; if(!not_prime[n])n=1,s=c; int i=0; while(n>1) { if(n%prime[i]==0) { s=(s*c)%mod; n/=prime[i]; } else i++; if(!not_prime[n])n=1,s=s*c%mod; } printf("%lld\n",s); } return 0; }