链接: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;
}



京公网安备 11010502036488号