【Atcoder】 [ARC158D] Equation

news/2024/7/4 0:46:58

题目链接

Atcoder方向
Luogu方向

题目解法

考虑等式两边都为多次齐次项
令等式左边的值为 F ( x , y , z ) F(x,y,z) F(x,y,z),等式右边的值为 G ( x , y , z ) G(x,y,z) G(x,y,z)
F ( x , y , z ) ≡ t ∗ G ( x , y , z )    ( m o d    p ) F(x,y,z)\equiv t*G(x,y,z)\;(mod \;p) F(x,y,z)tG(x,y,z)(modp)
因为等式左边比等式右边高一次
所以 F ( x t , y t , z t ) ≡ G ( x t , y t , z t )    ( m o d    p ) F(\frac{x}{t},\frac{y}{t},\frac{z}{t})\equiv G(\frac{x}{t},\frac{y}{t},\frac{z}{t})\;(mod\;p) F(tx,ty,tz)G(tx,ty,tz)(modp)

由式子可以 t = F ( x , y , z ) ∗ G ( x , y , z ) − 1 t=F(x,y,z)*G(x,y,z)^{-1} t=F(x,y,z)G(x,y,z)1
因为 t ≠ 0 t\ne 0 t=0,所以 F ( x , y , z ) F(x,y,z) F(x,y,z) G ( x , y , z ) G(x,y,z) G(x,y,z) 不等于 0 0 0,就一定有一组解

考虑没有解的情况出现概率较小( < 1 4 <\frac{1}{4} <41),所以考虑随机 x , y , z x,y,z x,y,z 的值,直到找到一组合法的解

#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
	int FF=0,RR=1;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
	for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
	return FF*RR;
}
int qmi(int a,int b,int p){
	int res=1;
	for(;b;b>>=1){
		if(b&1) res=res*a%p;
		a=a*a%p;
	}
	return res;
}
void work(){
	int n=read(),p=read();
	while(true){
		int x=rand()%(p-1)+1,y=rand()%(p-1)+1,z=rand()%(p-1)+1;
		if(x==y||x==z||y==z) continue;
		int xn=qmi(x,n,p),yn=qmi(y,n,p),zn=qmi(z,n,p);
		int mi0=(x+y+z)%p,mi1=(xn+yn+zn)%p,mi2=(xn*xn%p+yn*yn%p+zn*zn%p)%p;
		int Left=mi0*mi1%p*mi2%p,Right=(xn*xn%p*xn%p+yn*yn%p*yn%p+zn*zn%p*zn%p)%p;
//		cout<<x<<' '<<y<<' '<<z<<' '<<mi0<<' '<<mi1<<' '<<mi2<<' '<<Left<<' '<<Right<<'\n';
		if(!Right||!Left) continue;
		int t=Right*qmi(Left,p-2,p)%p;
		x=x*t%p,y=y*t%p,z=z*t%p;
//		cout<<t<<'\n';
		if(x>y) swap(x,y);
		if(x>z) swap(x,z);
		if(y>z) swap(y,z);
		printf("%lld %lld %lld\n",x,y,z);
		return;
	}
} 
signed main(){
	srand(time(NULL));
	int T=read();
	while(T--) work();
	return 0;
}


http://www.niftyadmin.cn/n/4518236.html

相关文章

领导说“你不喝就是看不起我”,用这3套话术硬怼,让小人掉价

朋友逼你喝酒&#xff0c;“你不喝就是不给我面子”&#xff0c;你怎么怼都可以&#xff0c;大不了这样的朋友不要了。但是领导也这样强迫你喝酒&#xff0c;“你不喝就是看不起我”&#xff0c;你怎么才能怼出高情商呢&#xff1f;看到最后&#xff0c;千古一招&#xff0c;足…

人到中年请客求人,三请三不请,看透这3种人,别遭人打脸

人到中年&#xff0c;多事之秋。上有老&#xff0c;下有小&#xff0c;中间有房贷。人过五十&#xff0c;家家有本难念的经&#xff0c;遇到难事&#xff0c;只能弯下腰、低下头&#xff0c;请客求人自所难免。人到中年&#xff0c;就要知己知彼&#xff0c;既有自知之明&#…

领导发微信,该回“收到”还是“好的”?回复不当,被领导敲打

前几天&#xff0c;王总给华子发微信&#xff1a;“明天李董要来&#xff0c;航班12345&#xff0c;你准备一下。”华子迅速回复“收到”&#xff08;好的&#xff09;。职场上多么平常的一种回复啊。王总扭头对总监说&#xff0c;华子这小子&#xff0c;以后还要多敲打敲打。领…

你真的会给领导发微信吗?三发三不发,不懂这6招,必被敲打

微信&#xff0c;已经成为最为普及的即时通讯工具。我们在生活和工作中&#xff0c;大量应用微信沟通。但是&#xff0c;你真的会给领导发微信吗&#xff1f;前不久&#xff0c;出了几件芝麻绿豆大的“糗事”&#xff1a;比如&#xff0c;某员工回复领导“嗯”被辞退&#xff0…

JavaSE 8—新的时间和日期API

本文由 ImportNew - 胡 劲寒 翻译自 oracle。如需转载本文&#xff0c;请先参见文章末尾处的转载要求。ImportNew注&#xff1a;如果你也对Java技术翻译分享感兴趣&#xff0c;欢迎加入我们的 Java开发 小组。参与方式请查看小组简介。 为什么我们需要一个新的时间日期API Java…

怎么从饭局看自己在领导心中地位?别傻傻喝酒,高人看这6个举动

有位职场新人很苦恼&#xff0c;悄悄问火锅哥&#xff1a;昨天参加饭局&#xff0c;给领导敬酒时&#xff0c;感觉他看不起我。怎么从参加饭局看出我在领导心目中的地位&#xff1f;这位新人有上进心是好的&#xff0c;心事重也是年轻人常犯的毛病。但这个问题确实问得好。从领…

饭局上我说“抽根华子”,领导说“你上香呢”,不懂5礼数受冷落

我入职一家新单位。老舅正好跟单位领导张主任是同学&#xff0c;张罗着吃顿饭&#xff0c;顺便做做工作&#xff0c;争取把我安排进办公室&#xff0c;最好能给领导当个秘书。我为了给领导初次见面留个好印象&#xff0c;特意买了包“华子”&#xff08;中华烟的民间俗称&#…

员工得绝症,在私企和国企有何区别?局内人:这4个兜底政策真好

前不久&#xff0c;某知名公司百万年薪总监患重病被辞退&#xff0c;网友又翻出某易患病员工被保安赶出公司的旧闻&#xff0c;引发一场热议&#xff1a;如果员工得了绝症&#xff08;大病&#xff09;&#xff0c;私企和国企的处理方式有什么区别&#xff1f;国企的范围太大&a…