链接:https://ac.nowcoder.com/acm/contest/317/D
本题的关键是所有质数的和 q = n*euler(n)/2;
先用欧拉函数求出所有质数的和,再用快速幂求出k^q
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
long long mod = 1e9+7;
long long f(long long k,long long p){
long long res = 1;
while(p){
if(p&1) res = (res*k)%mod;
k = (k*k)%mod;
p >>= 1;
}
return res;
}
long long euler(long long n){
long long res = n,a = n;
for(long long i = 2;i*i<=a;++i){
if(a % i == 0){
res = res/i*(i-1);
while(a % i == 0){
a /= i;
}
}
}
if(a > 1) res = res/a*(a-1);
return res;
}
int main(){
long long n,k,a,b,p;
cin>>n>>k>>a>>b;
p = n*euler(n)/2;
p %= mod-1;
cout<<(a+b)*f(k,p)%mod<<endl;
return 0;
}