πŸ’  Cpp/[BOJ] λ‹¨κ³„λ³„λ‘œ 풀어보기

[BOJ][C++] λ°±μ€€ 4134번: λ‹€μŒ μ†Œμˆ˜ (Silver IV)

선달 2025. 1. 16. 04:36
λ°˜μ‘ν˜•

문제

μ •μˆ˜ n(0 ≤ n ≤ 4*109)κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, n보닀 ν¬κ±°λ‚˜ 같은 μ†Œμˆ˜ 쀑 κ°€μž₯ μž‘μ€ μ†Œμˆ˜ μ°ΎλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ κ°œμˆ˜κ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” ν•œ μ€„λ‘œ 이루어져 있고, μ •μˆ˜ n이 주어진닀.

좜λ ₯

각각의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄μ„œ n보닀 ν¬κ±°λ‚˜ 같은 μ†Œμˆ˜ 쀑 κ°€μž₯ μž‘μ€ μ†Œμˆ˜λ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

 

풀이

μ•„λ₯΄ν† μŠ€ν…Œλ„€μŠ€μ˜ 체가 무λ ₯ν™”λ˜λŠ” 문제

μ†Œμˆ˜μ˜ μ •μ˜λ₯Ό μ΄μš©ν•΄μ•Όν•œλ‹€.

말 κ·ΈλŒ€λ‘œ μ²˜μŒλΆ€ν„° 자기 μžμ‹ κΉŒμ§€ λͺ¨λ“  수둜 λ‹€ λ‚˜λˆ λ³΄κ³  ν•˜λ‚˜λΌλ„ λ‚˜λˆ„μ–΄ 떨어지면 μ†Œμˆ˜κ°€ μ•„λ‹Œκ±Έλ‘œ μ†Œμˆ˜ μ—¬λΆ€ νŒλ‹¨ν•˜κΈ°

 

μ΄λ•Œ μ‹œκ°„μ΄ˆκ³Όκ°€ μ•ˆλ‚˜κΈ° μœ„ν•΄μ„œλŠ” μ „λΆ€ λ„λŠ” λŒ€μ‹  반절만 루프λ₯Ό ν•΄μ•Όν•œλ‹€

예λ₯Όλ“€μ–΄ 8이 μ†Œμˆ˜μΈμ§€ νŒλ‹¨ν• λ•ŒλŠ” 1,2,4,8 μ€‘μ—μ„œ 2κΉŒμ§€λ§Œ λ‚˜λˆ λ³΄λ©΄ λœλ‹€.

24λ₯Ό νŒλ‹¨ν• λ•ŒλŠ” 1,2,3,4,6,8,12,24 쀑 4κΉŒμ§€λ§Œ

100을 νŒλ‹¨ν• λ•ŒλŠ” 1,2,4,5,10,20,25,50,100 쀑 10κΉŒμ§€λ§Œ

연산해보면 되기 λ•Œλ¬Έμ— λ°˜λ³΅λ¬Έμ„ j*j<=i κΉŒμ§€λ§Œ λŒλ €μ•Όν•œλ‹€.

 

25%μ •λ„μ—μ„œ ν‹€λ ΈμŠ΅λ‹ˆλ‹€κ°€ λœ¬λ‹€λ©΄ μ˜€λ²„ν”Œλ‘œμš°λ₯Ό μ˜μ‹¬ν•΄λ³΄μž

μ΅œλŒ€κ°’μΈ 4000000000 을 λ„£μ—ˆμ„ λ•Œ 4000000007이 λ‚˜μ™€μ•Όν•œλ‹€.

μ½”λ“œμ—μ„œ μ“°μ΄λŠ” λŒ€λΆ€λΆ„ λ³€μˆ˜μ˜ μžλ£Œν˜•μ€ intκ°€ μ•„λ‹Œ Long long 이닀. 

// 풀이 : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

typedef long long ll;

bool isPrime(ll i) {
    if(i==0 || i==1) {
        return false;
    }
    
    for(ll j=2; j*j<=i; j++) {
        if(i%j==0) {
            return false;
        }
    }
    return true;
}

ll solution(ll n) {
    for(ll i=n; true; i++) {
        if(isPrime(i)) {
            return i;
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	int t;
	ll n;
	cin >> t;
	while(t--) {
	    cin >> n;
	    ll ans = solution(n);
	    cout << ans << "\n";
	}
	
    return 0;
}
λ°˜μ‘ν˜•