第四次作业
第七章
2 3 6 8
第八章
1 3 5
9
#include <iostream>
#include <cmath>
using namespace std;
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
int findGenerator(int p) {
int phi = p - 1;
for (int i = 2; i < p; i++) {
bool isGenerator = true;
if (gcd(i, p) == 1) {
for (int j = 1; j < phi; j++) {
if ((long long)::pow(i, j) % p == 1) {
break;
}
}
if (isGenerator) {
return i;
}
}
}
return -1;
}
int main() {
int n;
cout << "请输入n: ";
cin >> n;
int largestPrime = 0;
int largestGenerator = 0;
for (int p = 2; p < n; p++) {
bool isPrime = true;
for (int i = 2; i <= sqrt(p); i++) {
if (p % i == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
int generator = findGenerator(p);
if (generator != -1) {
if (p > largestPrime) {
largestPrime = p;
largestGenerator = generator;
}
}
}
}
if (largestPrime != 0) {
cout << "最小生成元为:" << largestGenerator << endl;
cout << "对应的素数为:" << largestPrime << endl;
}
else {
cout << "不存在生成元 " << endl;
}
return 0;
}