Product 1 Modulo N CodeForces - 1514C
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Product 1 Modulo N CodeForces - 1514C相关的知识,希望对你有一定的参考价值。
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;
}
以上是关于Product 1 Modulo N CodeForces - 1514C的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #716 (Div. 2) C. Product 1 Modulo N
POJ 1995 Raising Modulo Numbers(快速幂)