[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)3?3ab(a+b)=(a+b)(a2+b2?ab)
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)3?3cd(c+d)=(c+d)(c2+d2?cd)
∴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+b2?ab)=n(c+d)(c2+d2?cd)
等式兩邊帶著系數m,n很不方便,(a2+b2?ab),(c2+d2?cd)結構較復雜,等式兩邊帶著系數m,n很不方便,(a^2+b^2-ab),(c^2+d^2-cd)結構較復雜,等式兩邊帶著系數m,n很不方便,(a2+b2?ab),(c2+d2?cd)結構較復雜,
考慮用(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=km令a+b=kn,c+d=km
∴a2+b2?ab=c2+d2?cd①\therefore a^2+b^2-ab=c^2+d^2-cd①∴a2+b2?ab=c2+d2?cd①
盡量讓左式出現(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)2?3ab=(c+d)2?3cd
k2n2?3ab=k2m2?3cdk^2n^2-3ab=k^2m^2-3cdk2n2?3ab=k2m2?3cd
k2(n2?m2)=3(ab?cd)k^2(n^2-m^2)=3(ab-cd)k2(n2?m2)=3(ab?cd)
考慮令k=3,構造3(n2?m2)=ab?cd②:考慮令k=3,構造3(n^2-m^2)=ab-cd②:考慮令k=3,構造3(n2?m2)=ab?cd②:
嘗試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,d嘗試1:令ab=3n2,cd=3m2,與a+b=3n,c+d=3m聯立求解a,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),考慮求出(a?b),(c?d):
回到①式,讓左式出現(a?b),右式出現(c?d):回到①式,讓左式出現(a-b),右式出現(c-d):回到①式,讓左式出現(a?b),右式出現(c?d):
(a?b)2+ab=(c?d)2+cd(a-b)^2+ab=(c-d)^2+cd(a?b)2+ab=(c?d)2+cd
讓此式向②式靠近:讓此式向②式靠近:讓此式向②式靠近:
(c?d)2?(a?b)2=ab?cd③(c-d)^2-(a-b)^2=ab-cd③(c?d)2?(a?b)2=ab?cd③
②③聯立得:②③聯立得:②③聯立得:
(c?d)2?(a?b)2=3(n2?m2)(c-d)^2-(a-b)^2=3(n^2-m^2)(c?d)2?(a?b)2=3(n2?m2)
令u=c?d,v=a?b令u=c-d,v=a-b令u=c?d,v=a?b
u2?v2=3(n2?m2)u^2-v^2=3(n^2-m^2)u2?v2=3(n2?m2)
(u+v)(u?v)=3(n+m)(n?m)(u+v)(u-v)=3(n+m)(n-m)(u+v)(u?v)=3(n+m)(n?m)
把3放進其中一個括號中:把3放進其中一個括號中:把3放進其中一個括號中:
(u+v)(u?v)=(n+m)(3n?3m)(u+v)(u-v)=(n+m)(3n-3m)(u+v)(u?v)=(n+m)(3n?3m)
令u+v=n+m,u?v=3n?3m令u+v=n+m,u-v=3n-3m令u+v=n+m,u?v=3n?3m
解得u=2n?m,v=2m?n解得u=2n-m,v=2m-n解得u=2n?m,v=2m?n
由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-m由a+b=3n,a?b=2m?n得a=n+m,b=2n?m
由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-n由c+d=3m,c?d=2n?m得c=n+m,d=2m?n
如此,我們便構造出了一組整數解
考慮何時有正整數解:
2n?m>0,2m?n>02n-m>0,2m-n>02n?m>0,2m?n>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?,mn?←m23n? (保證變化后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?,mn?←33m23n? (保證變化后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] 简单的数论题(数学、构造)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [XSY] 宝藏(LCS,DP)
- 下一篇: 怎么免费下载怎么免费下载文档