C. Product 1 Modulo N
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Now you get Baby Ehab's first words: "Given an integer nn, find the longest subsequence of [1,2,…,n−1][1,2,…,n−1] whose product is 11 modulo nn." Please solve the problem.
A sequence bb is a subsequence of an array aa if bb can be obtained from aa by deleting some (possibly all) elements. The product of an empty subsequence is equal to 11.
Input
The only line contains the integer nn (2≤n≤1052≤n≤105).
Output
The first line should contain a single integer, the length of the longest subsequence.
The second line should contain the elements of the subsequence, in increasing order.
If there are multiple solutions, you can print any.
Examples
input
Copy
5
output
Copy
3 1 2 3
input
Copy
8
output
Copy
4 1 3 5 7
Note
In the first example, the product of the elements is 66 which is congruent to 11 modulo 55. The only longer subsequence is [1,2,3,4][1,2,3,4]. Its product is 2424 which is congruent to 44 modulo 55. Hence, the answer is [1,2,3][1,2,3].
=========================================================================
先对50以内的全部数字进行dfs打表找规律发现其实选的都是互质的数,唯一不同的是,有些数字选了n-1有些却没有选,我们可以对全部互质数的乘积进行判断,如果是1,那么直接输出答案,否则去掉一个n-1输出剩余即可。
# include<iostream>
# include<algorithm>
# include<math.h>
# include<queue>
using namespace std;
typedef long long int ll;
int ans[1000000+10];
int main()
{
int n;
cin>>n;
int len=1;
ll sum=1;
for(int i=1;i<n;i++)
{
if(__gcd(i,n)==1)
{
ans[len]=i;
sum*=i;
sum%=n;
len++;
}
}
if(sum==1)
{
cout<<len-1<<endl;
for(int i=1;i<=len-1;i++)
{
cout<<ans[i]<<" ";
}
}
else
{
cout<<len-2<<endl;
ll temp=1;
for(int i=1;i<=len-2;i++)
{
cout<<ans[i]<<" ";
temp*=ans[i];
}
}
return 0;
}