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