高次同余方程求解
描述
解高次同余方程是数论里的一个基础问题。现在邀请你来解一个简单的高次同余方程,xk=1(mod n)。(注:xk=1(mod n)的意思是xk除以n的余数为1)
数据范围:n和k是整数,且0 < k < n < 1000
输入
两个整数,分别为k和n。
输出
从小到大输出方程的所有满足0 < x < n的整数解x,每行输出一个。
样例输入
3 7
样例输出
1
2
4
提示
需要注意中间计算结果的可能范围。
(a * b) % p = ((a % p) * (b % p)) % p
样例输入:
398 702
样例输出
1
53
649
701
//高次同余方程求解
#include<iostream>
using namespace std;
int main(){
int k, n;
cin >> k >> n;
int res = 1;
for (int x = 1; x < n; x++){
res = 1;
for (int i = 1; i <= k; i++){//求x的k次方
res = res*x;
res = res%n;//根据提示,取余是为了防止数据溢出
}
if (res == 1){
cout << x << endl;
}
}
return 0;
}