题意: 解法: 不能选与n不互质的数, 因为选了之后%n一定不为1,因为gcd(乘积,n)!=1. 证明: 设gcd(p,n)=z,则p=xz,n=yz, 设选的其他数乘积为q, 则pq%n=1,设pq=kn+1, 那么qxz=kyz+1, (qx-ky)z=1, 当且仅当z=1时式子才有可能成立, 而gcd=z>1,因此式子不可能成立, 所以如果选择了gcd!=1的数,一定不满足条件. 因此只能选与n互质的数, 设s为所有与n互质的数的积对n取模的结果, 如果s=1,那么这些数全部可以选择, 如果s!=1,此时s一定与n互质,因此s也在这些数中, 那么选除了s的其他数就行了. code: #include<bits/stdc++.h> #define int long long using namespace std; const int maxm=2e6+5; vector<int>ans; map<int,int>mp; int n; void solve(){ cin>>n; int s=1; for(int i=1;i<=n-1;i++){ if(__gcd(i,n)!=1){ mp[i]=1; }else{ s=s*i%n; } } if(s!=1)mp[s]=1; for(int i=1;i<=n-1;i++){ if(!mp[i]){ ans.push_back(i); } } cout<<ans.size()<<endl; for(auto i:ans){ cout<<i<<' '; } cout<<endl; } signed main(){ ios::sync_with_stdio(0); solve(); return 0; }