Product 1 Modulo N CodeForces - 1514C
题意:
在[1,n-1]中选x个数,使得乘积mod n =1,求x的最大值,并输出所选的数
题解:
我们设S为所选x个数的乘积
S%n == 1说明gcd(S,n)==1,即所选的x个数均与n互质,如果不互质,不可能%n=1
因此只能选与n互质的数
设sum为所有与n互质的数的乘积,并对n取模
如果sum=1,说明这些数都可以选
如果sum!=1,此时sum一定与n互质(因为sum的因子都是与n互质的),那sum这个数也参与了乘积中,如果去掉这个数,%n就等于1了
代码:
#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(int i=0;i<ans.size();i++){cout<<ans[i]<<" ";}cout<<endl;
}
signed main(){ios::sync_with_stdio(0);solve();return 0;
}