欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

[XSY] 简单的数论题(数学、构造)

发布时间:2023/12/3 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [XSY] 简单的数论题(数学、构造) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

简单的数论题

m(a3+b3)=n(c3+d3)m(a^3+b^3)=n(c^3+d^3)m(a3+b3)=n(c3+d3)
考虑因式分解(a3+b3),(c3+d3):考虑因式分解(a^3+b^3),(c^3+d^3):(a3+b3),(c3+d3):
a3+b3=(a+b)3−3ab(a+b)=(a+b)(a2+b2−ab)a^3+b^3=(a+b)^3-3ab(a+b)=(a+b)(a^2+b^2-ab)a3+b3=(a+b)33ab(a+b)=(a+b)(a2+b2ab)
c3+d3=(c+d)3−3cd(c+d)=(c+d)(c2+d2−cd)c^3+d^3=(c+d)^3-3cd(c+d)=(c+d)(c^2+d^2-cd)c3+d3=(c+d)33cd(c+d)=(c+d)(c2+d2cd)
∴m(a+b)(a2+b2−ab)=n(c+d)(c2+d2−cd)\therefore m(a+b)(a^2+b^2-ab)=n(c+d)(c^2+d^2-cd)m(a+b)(a2+b2ab)=n(c+d)(c2+d2cd)
等式两边带着系数m,n很不方便,(a2+b2−ab),(c2+d2−cd)结构较复杂,等式两边带着系数m,n很不方便,(a^2+b^2-ab),(c^2+d^2-cd)结构较复杂,m,n便(a2+b2ab),(c2+d2cd)
考虑用(a+b),(c+d)把m,n消掉:考虑用(a+b),(c+d)把m,n消掉:(a+b),(c+d)m,n
令a+b=kn,c+d=km令a+b=kn,c+d=kma+b=kn,c+d=km
∴a2+b2−ab=c2+d2−cd①\therefore a^2+b^2-ab=c^2+d^2-cd①a2+b2ab=c2+d2cd
尽量让左式出现(a+b),右式出现(c+d):尽量让左式出现(a+b),右式出现(c+d):(a+b)(c+d):
(a+b)2−3ab=(c+d)2−3cd(a+b)^2-3ab=(c+d)^2-3cd(a+b)23ab=(c+d)23cd
k2n2−3ab=k2m2−3cdk^2n^2-3ab=k^2m^2-3cdk2n23ab=k2m23cd
k2(n2−m2)=3(ab−cd)k^2(n^2-m^2)=3(ab-cd)k2(n2m2)=3(abcd)
考虑令k=3,构造3(n2−m2)=ab−cd②:考虑令k=3,构造3(n^2-m^2)=ab-cd②:k=3,3(n2m2)=abcd:
尝试1:令ab=3n2,cd=3m2,与a+b=3n,c+d=3m联立求解a,b,c,d尝试1:令ab=3n^2,cd=3m^2,与a+b=3n,c+d=3m联立求解a,b,c,d1ab=3n2,cd=3m2a+b=3n,c+d=3ma,b,c,d
结果:方程无解结果:方程无解
尝试2:因为已知(a+b),(c+d),考虑求出(a−b),(c−d):尝试2:因为已知(a+b),(c+d),考虑求出(a-b),(c-d):2(a+b),(c+d),(ab),(cd):
回到①式,让左式出现(a−b),右式出现(c−d):回到①式,让左式出现(a-b),右式出现(c-d):(ab)(cd)
(a−b)2+ab=(c−d)2+cd(a-b)^2+ab=(c-d)^2+cd(ab)2+ab=(cd)2+cd
让此式向②式靠近:让此式向②式靠近:
(c−d)2−(a−b)2=ab−cd③(c-d)^2-(a-b)^2=ab-cd③(cd)2(ab)2=abcd
②③联立得:②③联立得:
(c−d)2−(a−b)2=3(n2−m2)(c-d)^2-(a-b)^2=3(n^2-m^2)(cd)2(ab)2=3(n2m2)
令u=c−d,v=a−b令u=c-d,v=a-bu=cd,v=ab
u2−v2=3(n2−m2)u^2-v^2=3(n^2-m^2)u2v2=3(n2m2)
(u+v)(u−v)=3(n+m)(n−m)(u+v)(u-v)=3(n+m)(n-m)(u+v)(uv)=3(n+m)(nm)
把3放进其中一个括号中:把3放进其中一个括号中:3
(u+v)(u−v)=(n+m)(3n−3m)(u+v)(u-v)=(n+m)(3n-3m)(u+v)(uv)=(n+m)(3n3m)
令u+v=n+m,u−v=3n−3m令u+v=n+m,u-v=3n-3mu+v=n+m,uv=3n3m
解得u=2n−m,v=2m−n解得u=2n-m,v=2m-nu=2nm,v=2mn
由a+b=3n,a−b=2m−n得a=n+m,b=2n−m由a+b=3n,a-b=2m-n得a=n+m,b=2n-ma+b=3n,ab=2mna=n+m,b=2nm
由c+d=3m,c−d=2n−m得c=n+m,d=2m−n由c+d=3m,c-d=2n-m得c=n+m,d=2m-nc+d=3m,cd=2nmc=n+m,d=2mn

如此,我们便构造出了一组整数解


考虑何时有正整数解:
2n−m>0,2m−n>02n-m>0,2m-n>02nm>0,2mn>0
∴nm∈(12,2)时所得为正整数解\therefore \frac{n}{m}\in(\frac{1}{2},2)时所得为正整数解mn(21,2)

nm∉(12,2)\frac{n}{m}\not\in (\frac{1}{2},2)mn(21,2),寻找p3nq3m∈(12,2)\frac{p^3n}{q^3m}\in(\frac{1}{2},2)q3mp3n(21,2)(令a,ba,ba,b变为原来的qqq倍,c,dc,dc,d变为原来的ppp倍)

为了方便,我们设n<mn<mn<m(否则的话swap(n,m)即可)
那么此时必然有0<nm<10<\frac{n}{m}<10<mn<1
若nm<14,nm←23nm若\frac{n}{m}<\frac{1}{4},\frac{n}{m}\leftarrow\frac{2^3n}{m}mn<41,mnm23n (保证变化后nm<2\frac{n}{m}<2mn<2)
若14<=nm<=12,nm←23n33m若\frac{1}{4}<=\frac{n}{m}<=\frac{1}{2},\frac{n}{m}\leftarrow\frac{2^3n}{3^3m}41<=mn<=21,mn33m23n (保证变化后12<nm<2\frac{1}{2}<\frac{n}{m}<221<mn<2)
若nm>12,保证有正整数解若\frac{n}{m}>\frac{1}{2},保证有正整数解mn>21,


总结:既然题目只要求一组解,那么就要大胆地作假设来方便自己的运算,大胆地凑答案

#include<iostream> #include<cstdio> using namespace std; typedef long long ll; ll read(){ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; } int T,rev; ll n,m,a,b,c,d,p,q; void solve(){rev=0;p=q=1ll;if(n>m){swap(n,m);rev=1;}while(4ll*n<m){p*=2ll;n*=8ll;}if(2ll*n<=m){p*=3ll;n*=27ll;q*=2ll;m*=8ll;}a=q*(n+m);b=q*(2ll*n-m);c=p*(n+m);d=p*(2ll*m-n);if(rev) printf("%lld %lld %lld %lld\n",c,d,a,b);else printf("%lld %lld %lld %lld\n",a,b,c,d); } int main(){scanf("%d",&T);while(T--){n=read();m=read();solve();}return 0; }

总结

以上是生活随笔为你收集整理的[XSY] 简单的数论题(数学、构造)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。