C. Product 1 Modulo N

https://codeforces.com/problemset/problem/1514/C

题意:求1~n中,最长的乘积模n后为1的子序列.

思路:模n为1说明序列的乘积为n的乘法逆元,则每个元素都与n互质.默认序列包含了所有与n互质的元素,最后看模n后结果是否为1,如果不为1,则从序列中移除该质数即可.

inline void solve() {
int n;
cin >> n;

vector ok(n + 1, false);
long long rem = 1;
for (int i = 1; i < n; ++i) {
ok[i] = (::gcd(i, n) == 1);
if (ok[i]) {
rem = (rem * i) % n;
}
}

if (rem != 1) {
ok[rem] = false;
}

cout << count(ok.begin(), ok.end(), true) << '\n';
for (int i = 1; i < n; ++i) {
if (ok[i]) {
cout << i << ' ';
}
}

}

posted @ 2025-04-28 09:30  _Yxc  阅读(33)  评论(0)    收藏  举报