CodingTest/백준

[c++] 백준 - 1747번: 소수&팰린드롬

Daybreak21 2023. 4. 7. 23:45

1747번: 소수&팰린드롬 (acmicpc.net)

 

1747번: 소수&팰린드롬

어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다. 어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고,

www.acmicpc.net

 

#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <cmath>
#include <string>
using namespace std;

bool isPrime(int n) {
	//1과 2는 밑의 반복문으로 판별이 안되기때문에 따로 조건문 정의
	if (n == 1) return 0;
	if (n == 2) return 1;
    //sqrt는 제곱근을 구하는 함수
	for (int i = 2; i < sqrt(n) + 1; i++) {
		if (n % i == 0) return 0;
	}
	return 1;
}

bool isPalindrome(int n) {
	//n을 string으로 만들어줌
	string n_str = to_string(n);
	int len = n_str.length();
	for (int i = 0; i < len/2; i++) {
		if (n_str[i] != n_str[len - i - 1]) {
			return 0;
		}
	}
	return 1;
}

int main(void){
	int n;
	cin >> n;
	while (1) {
		if ( isPalindrome(n) && isPrime(n) ) {
			cout << n;
			break;
		}
		else n++;
	}

	return 0;
}

 

처음 어떻게 풀까 생각할때 에라토스테네스의 체를 쓸까 생각하였지만 수의 범위를 어디까지 설정해야할지 감으로 정할수가 없어서 제곱근까지 i로 계속 나눠주는 방법을 사용하였다. 

 

하지만 최대 범위가 N (1 ≤ N ≤ 1,000,000)라고 주어져있기때문에 1000000이란 숫자를 이용하여 조건에 맞는 수를 일단 구하고(1003001) 그 범위까지 에라토스테네스의 체를 사용하여 문제를 푸는 방법도 있다. 

 

*링크는 에라토스테네스의 체를 사용하여 소수를 구한 문제이다. 

[파이썬]프로젝트 오일러 #7 (tistory.com)

 

[파이썬]프로젝트 오일러 #7

소수를 크기 순으로 나열하면 2, 3, 5, 7, 11, 13, ... 과 같이 됩니다. 이 때 10,001번째의 소수를 구하세요. n = 2**20 primes = [] #소수를 담을 list table = [False, False] + [True]*(n-1) for i in range(2, n+1): if table[i]: pr

daybreakfrontline21.tistory.com