반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 3933 라그랑주의 네 제곱수 정리 본문

백준(Baekjoon) 문제

백준 3933 라그랑주의 네 제곱수 정리

huiung 2019. 1. 28. 16:50
반응형

문제와 채점은 위 사이트에서 확인 하실 수 있습니다

 

이 문제는 양의 정수는 많아야 4개의 제곱수로 표현 할 수 있다는 라그랑주의 네 제곱수 정리에 따라 어떤 수를 입력 받았을 때 그 숫자가 몇 개의 4개 이하의 제곱수의 합으로 표현 될 수 있는지 구하는 문제입니다. 입력은 2^15보다 작은 숫자가 들어오므로 저는 그냥 for문을 4번 돌려서 해결을 하였습니다.

더하는 과정에서 값이 커질 경우 break를 해주면서 불필요한 횟수를 줄이면 입력이 그렇게 크지 않아서 시간안에 해결이 됩니다.

 

다음은 코드입니다.

 

#include <iostream>
#include <cmath>

using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int input = 255;
	int num;
	int n = 0;
	
	while(input) {
		n = 0;
		cin >> num;
		if(num == 0)
			break;
		
		int len = (int)sqrt(num);
		
		for(int i = 1; i <= len; i++) {
			if(i*i == num) {
				n++;
				continue;
			}
			for(int j = i; j <= len; j++) {
				if(i*i + j*j == num) {
					n++;
					break;
				}
				else if(i*i + j*j > num)
					break;
				
				for(int k = j; k <= len; k++) {
					if(i*i + j*j + k*k == num) {
						n++;
						break;
					}
					else if(i*i + j*j + k*k > num)
						break;
					
					for(int l = k; l <= len; l++) {
						if(i*i + j*j + k*k + l*l == num) {
							n++;
							break;
						}
						else if(i*i + j*j + k*k + l*l > num)
							break;
					}
				}
			}
		}
		
		cout<<n<<'\n';
		input--;
	}
	
	return 0;
}
반응형

'백준(Baekjoon) 문제' 카테고리의 다른 글

백준 1002번 터렛  (0) 2019.01.29
백준 10216 Count Circle Groups  (0) 2019.01.29
백준 14928 큰 수(BIG)  (0) 2019.01.26
백준 1038 감소하는 수  (0) 2019.01.26
백준 1937 욕심쟁이 판다  (0) 2019.01.25