给定 a, b,求 1 ≤ x < a^b 中有多少个 x 与 a^b 互质。由于答案可能很大,你只需要输出答案对 998244353 取模的结果。
输入格式
输入一行包含两个整数分别表示 a, b,用一个空格分隔。
输出格式
输出一行包含一个整数表示答案。
样例输入
2 5
样例输出
16
提示
对于 30% 的评测用例,a^b ≤ 10^6 ;
对于 70% 的评测用例,a ≤ 106,b ≤ 10^9 ;
对于所有评测用例,1 ≤ a ≤ 10^9,1 ≤ b ≤ 101^8 。
cpp
#include<iostream>
using namespace std;
typedef long long LL;
const int mod=998244353;
LL quick_pow(LL a,LL b){
LL res=1;
while(b){
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
LL eu(LL n){
LL res=n;
for(LL i=2;i<=n/i;i++){
if(n%i==0){
res=res*(i-1)/i%mod;
while(n%i==0) n/=i;
}
}
if(n>1) res=res*(n-1)/n%mod;
return res;
}
int main(){
LL a,b;
cin>>a>>b;
LL n=quick_pow(a,b);
cout<<eu(n)%mod<<endl;
return 0;
}