互质数的个数
题目
给定α,b,求1≤x<a的b次幂中有多少个x与a的b次幂互质。由于答案可能很大,你只需要输出答案对998244353取模的结果。
代码解释
javascript
#include <bits/stdc++.h>//包含编程竞赛所需的全部核心头文件
using namespace std;
typedef unsigned long long ull;
const int mod = 998244353;
//快速幂函数
ull quick_power(ull base, ull exp, ull mod)
{
ull res = 1;
while(exp)
{
if(exp & 1)//相当于判断exp是否为奇数
{
res = res * base % mod;
}
base = base * base % mod;
exp = exp >> 1;//相当于exp / 2
}
return res % mod;
}
//欧拉函数
ull Euler(ull n)
{
ull phi = n;
for(ull i = 2; i * i <= n; i++)//枚举n的质因数
{
if(n % i)//如果i不是n的质因数则直接跳出本次循环
{
continue;
}
while(n % i == 0)
{
n = n / i;//防止重复计算
}
phi = phi / i * (i - 1);
}
if(n > 1)
{
phi = phi / n * (n - 1);
}
return phi;
}
int main()
{
ull a, b;
cin >> a >> b;
ull Euler_a = Euler(a);
//最终结果Euler(a) * a^(b-1);
ull ans = Euler_a * quick_power(a, b-1, mod) % mod;
cout << ans << endl;
return 0;
}
测试


总结
本题主要结合快速幂运算和欧拉函数求出质因数的个数,需要注意数据的范围。
坚持编程,我一直在路上!