C. Product 1 Modulo N
思路:
要求序列乘积sum和n取模等1,也就是说它们两个是互质的。
那么这个序列的每一个数和n都是互质的
那就维护一个sum = (sum*i)%mod , 1<=i <n
舍去最后一个不等于1的sum即可,因为sum肯定也是和n互质的,所以是可以舍弃的值
#include <iostream>
#include <queue>
#include <algorithm>
#include <map>
#include <math.h>
using namespace std;
#define ll long long
const int maxn = 1*1e5+110;
const int INF = 1e9;
const int mod = 1e9+7 ;
int a[maxn];
int main(){
int n;
cin>>n;
ll sum=1;
for(int i=1;i<n;i++){
if(__gcd(i,n)==1){
a[i]=1;
sum = (sum*i)%n;
}
}
if(sum!=1) a[sum]=0;
int cnt =0;
for(int i=1;i<n;i++){
if(a[i])cnt++;
}
cout<<cnt<<endl;
for(int i=1;i<n;i++){
if(a[i])cout<<i<<" ";
}
}