본문 바로가기
알고리즘/프로그래머스

[C++] 유한소수 판별하기

by parkkingcar 2023. 5. 22.

 

유한소수 판별하기

두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.

 

분자와 분모의 최대공약수로 분모를 나눈 뒤, 그 분모가 2, 5 가 아닌 소수로 나눠지면 무한소수, 아니라면 유한소수입니다.

 

#include <string>
#include <vector>
#include <cmath>

using namespace std;

// 소수 구하기 O(log n)
bool isPrime2(int n) {
	for (int i = 2; i <= n; i++) { // 2~n의 제곱근까지
		if (n%i == 0) { // i가 n의 약수라면 소수가 아니므로 false return
			return false;
		}
	}
	return true;  // 2 ~ n-1까지 약수가 없다면 소수이므로, true return
}



// 삼항 연산자를 사용해서 참이면 최대공약수인 b를 return, 아니면 재귀를 사용해서 gcd(b, a % b) 반복
int gcd(int n, int m){ 
    return m ? gcd(m, n % m) : n;
}


int solution(int a, int b) {
    int answer = 0, gcd_num;
    gcd_num = gcd(a, b);
    b /= gcd_num;
    for(int i = 3; i <= b; i++){
        if(b % i == 0 && i != 5 && isPrime2(i)) return 2;
    }
    return 1;
}

 

 

 

+ 최대공약수를 이용한 최소공배수 구하기

 

// 삼항 연산자를 사용해서 참이면 최대공약수인 b를 return, 아니면 재귀를 사용해서 gcd(b, a % b) 반복
int gcd(int n, int m){ 
    return m ? gcd(m, n % m) : n;
}


// 최소공배수는 두 수의 곱을 최대공약수로 나누면 된다
int lcm(int n, int m) {
    return n * m / gcd(n, m);
}

 

 

 

소수판별

 

[알고리즘] 소수판별 알고리즘 C++

0.목차 소수의 개념 소수판별1 (시간복잡도 O(N) 알고리즘) 소수판별2 (시간복잡도 O(√N) 알고리즘) 소수판별3 (시간복잡도 O(Nlog(logN)) 에라토스테네스의 체 알고리즘) 1. 소수(Prime Number) 의 개념 소

khu98.tistory.com

 

에라토스테네스의 체

 

C++ 백준 BOJ 2960 에라토스테네스의 체

에라토스테네스의 체는 소수를 찾는 유명한 알고리즘입니다. 에라토스테네스의 체 에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org 아주 큰 범위에서 소수를 판별하는 문제

parkkingcar.tistory.com

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[C++] 다음에 올 숫자  (0) 2023.05.23
[C++] 숫자 문자열과 영단어  (0) 2023.05.23
[C++] 문자열 밀기  (0) 2023.05.22
[C++] (공백분리) 컨트롤 제트  (1) 2023.05.19
[C++] 소인수분해, 7의 개수  (0) 2023.05.18

댓글