Codeforces 1514 C

1514 C

题意

给出一个数n,求[1,2,3...n-1]的某个最长子序列,这个子序列的元素乘积模n余1。

思路

这是个思维题,一个数学公式

x1(mod n)kxk(mod kn)

所以子序列中的元素与n互质,累乘结果模n后如果不是1,那么将序列中等于结果的元素去掉

代码

void solve() 
{
	cin>>n;
	vector<int> a;
	for(int i=1;i<=n;i++) if(__gcd(i,n)==1) a.push_back(i);
	int ans=1;
	for(auto x:a) ans=ans*x%n;
	ans=ans%n;
	if(ans==1) 
	{	
		cout<<a.size()<<endl;
		for(auto x:a) cout<<x<<" ";
		cout<<endl;
	} 
	else 
	{	
		cout<<a.size()-1<<endl;
		for(auto x:a) if(ans!=x) cout<<x<<" ";
		cout<<endl;
	}
}
posted @   Liang2003  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示