열거 기술 01 (이하 바닥 순환을 사용할 수 있습니다) : 네 광장과

제목 : 라그랑주의 네 제곱수 정리, 또한 라그랑주의 정리로 알려진 : 각각의 양의 정수가 4 제곱에 최대 양의 정수로 표현 될 수있다. 포함 된 경우는 0, 단지 4 비트 수와 사각형을 나타낼 수있다.
예를 들어
5 = 0 0 ^ 2 + 2 + 1 + 2 ^ 2 2
7 1 2 = 1 + 2 + 1 + 2 ^ 2 ^ 2
다음 주어진 양의 정수 N에 대해, 다음과 같이 표현 될 수있다 : N = A ^ 2 + B ^ 2 + C ^ 2 + d를 ^ 2
는 A, B, C, D. 전적으로 솔루션의 작은 세트를 획득 할 필요가
입력 형식
프로그램 N (1 <= N 정수 포지티브 입력 <= 5,000,000)
출력 포맷
출력 네 음이 아닌 정수 A, B, C, D, 이격 중간 빈.
입력 샘플 1 :
5
의 샘플 출력 1 :
0012
샘플 입력 2
(12)는
출력 예 2 :
0222

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n, a, b, c, d;
    cin >> n;
    for(a=0; a*a <= n; a++){
        for(b=a; a*a + b*b <= n; b++){
            for(c=b; a*a + b*b + c*c <= n; c++){
            	d = sqrt(n - a*a - b*b - c*c);//注意
                if(a*a + b*b + c*c + d*d == n){
                    cout << a << " " << b << " " << c << " " << d << endl;
                    return 0;
				}
            }
		}
	}
    return 0;
}

이 문제는 알고리즘에 어떤 어려움이없는, 순수 열거 할 수 있지만, A, B, C, D는주기에 의해 표현된다, 다음, 타임 아웃! 그래서 여기에 팁이되고있다 : 마지막 번호를, 그것은 시간이 필요하지만, 직접 계산 SQRT을 제공하지만, 시간주기가 요구되는 것보다 짧은 SQRT. 물론, SQRT GET 반드시 정수가 아닌, 그것은 중요하지 않습니다! 나중에 여부 또는 이에 상응하는 판단을 만드는 데 사용하는 경우 때문입니다.

게시 15 개 원래 기사 · 원의 찬양 (10) · 전망 (213)

추천

출처blog.csdn.net/qq_39053800/article/details/104241110