四平定理,又称拉格朗日定理:
每个正整数最多可表示为4个正整数的平方和。
包括0在内,正好可以表示为四个数的平方和。
例如()符号是乘方的意思) ) ) ) ) ) ) ) ) )。
5=0^2 0^2 1^2 2^2
7=1^2 1^2 1^2 2^2
对于给定的正整数,平方和的表示法可能存在多个。
你要求对四个数进行排序:
0=a=b=c=d
然后,对于所有可能的表示法,a、b、c、d用联合主键按升序排列,最后输出最初的表示法
在程序中输入正整数n(n5000000 )
输出4个非负整数,按照从小到大的顺序排序,之间需要用空格分开
例如,在输入: 5的情况下,为0 0 1 2,例如,在输入: 12的情况下,为0 2 2 2,例如,在输入: 773535的情况下,输出:1 1 267 838方法1:map记录差分拒绝用上限决定困难暴力法,使用差分法将两个平方数ab先确定
主要是很难确定上限呢。 这里是上限不明确导致的超时…
# include bits/stdc.husingnamespacestd; typedef long ll; int main () STD : IOs :3360 sync _ with _ stdio (false ); CIN.Tie(0; cout.tie(0; int n; cinn; unordered_mapint,int book; for(inta=0; a*a=n/2; a ) for(intb=a ); b*b=n-a*a; b ) if ) book.find(a*ab*b )==book.end ) ) { book[a*a b*b]=a; }for(intc=0; c*c=n/2; c ) for(intd=c ); d*d=n/2-c*c; d ) { int t=n-c*c-d*d; if(book.find(t )!=book.end () ) { int a=book[t],b=int ) sqrt(n-a*a ) ); cout c ' ' d ' ' a ' ' b; 返回0; } } return 0; } 复杂度分析
3358www.Sina.com/:o(nn ) o ) sqrt ) n ) sqrt(n ) (o ) o ) nn )、Time: O ) )