약수 구하기 최적화 알고리즘

조한별·2022년 12월 13일
0
#include <string>
#include <vector>
#include <iostream>
#include <Windows.h>
#include <algorithm>
#include <cmath>

using namespace std;

void factor(int inputNum, vector<int>& vec) {
	vec.clear();

	if (inputNum <= 0) {
		return;
	}

	//변수로 따로 저장하지 않은 경우엔 for문의 매 반복마다 sqrt() 함수를 호출함으로 cpu 리소스를 낭비하게 된다.
	int squareRoot = sqrt(inputNum);

	//i가 1부터 시작 => 1과 자신 포함
	//i가 2부터 시작 => 1과 자신 미포함
	for (int i = 2; i <= squareRoot; i++)
	{
		if (inputNum % i != 0) continue;
		
		vec.push_back(i);
		//제곱근인 경우 같은 수가 두번 삽입되므로 예외처리로서 방지한다.
		if (i * i == inputNum) continue;
		vec.push_back(inputNum / i);
	}

	sort(vec.begin(), vec.end());
}

int main()
{
	int a = 1;
	vector<int> vec;

	while (a != 0)
	{
		system("cls");
		cout << "수 입력: ";
		cin >> a;
		factor(a, vec);

		for (int num : vec)
		{
			cout << num << endl;
		}

		Sleep(3000);
	}

    return EXIT_SUCCESS;
}
profile
게임프로그래머 지망생

0개의 댓글