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<bool> 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  阅读(16)  评论(0)    收藏  举报