题目链接 https://ac.nowcoder.com/acm/contest/317/D
欧拉函数和快速幂
关于欧拉函数 https://blog.csdn.net/lanyanzhiji123asd/article/details/86651083
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
long long int oula(long long int n)
{
int i;
long long int temp = n;
for(i = 2; i <= sqrt(n); i++)
{
if(n %i ==0)
{
temp = temp / i * (i-1);
while(n%i==0)
{
n /= i;
}
}
}
if(n>1)
temp = temp / n * (n-1);
return temp;
}
long long int quick_mod(long long int a, long long int b)
{
long long int temp = 1;
while(b)
{
if(b % 2 != 0)
{
temp *= a;
temp %= mod;
}
a *= a;
a %= mod;
b /= 2;
}
return temp;
}
int main()
{
int i;
std::ios::sync_with_stdio(false);
long long int n, k, A, B, ans,ou;
while(cin >> n >> k >> A >> B)
{
ou = oula(n);
if(ou%2==0){
ou = ou/2;
ou*=n;
}
else
{
ou *= n/2;
}
ans = quick_mod(k,ou)%mod;
ans *= A+B;
ans %= mod;
cout << ans << endl;
}
return 0;
}