Hi-λžŒπŸ‘‹ High-λžŒβ˜€οΈ

[c/c++] μ†Œμˆ˜ νŒλ³„ν•˜κΈ° λ³Έλ¬Έ

μ•Œκ³ λ¦¬μ¦˜

[c/c++] μ†Œμˆ˜ νŒλ³„ν•˜κΈ°

ν•˜μ΄λžŒ 2022. 3. 17. 00:50

2^61-1 μ΄λΌλŠ” 큰 수의 μ†Œμˆ˜ μ—¬λΆ€λ₯Ό νŒλ³„ν•˜κ³ , μ†Œμš” μ‹œκ°„μ„ λ‚˜νƒ€λ‚΄λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ˜€λ‹€.

 

μ΄λ•Œ, ν”„λ‘œκ·Έλž¨μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 쀄이기 μœ„ν•΄ μ œκ³±κ·Όμ„ μ‚¬μš©ν•˜μ˜€λ‹€.

 

#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;


int main() {
    clock_t start, end; 
    double result;

    // μ‹œκ°„ μΈ‘μ • μ‹œμž‘
    start = clock();

    long long int n = (long long int)pow(2,61)-1;
    bool isPrime = true;
    for (int i = 2; i <= sqrt(n); i++) {
        if (n%i == 0) {
            isPrime= false;
            break;
        }
    }

    if(isPrime) cout << "μ†Œμˆ˜μž…λ‹ˆλ‹€";
    else    cout << "μ†Œμˆ˜κ°€ μ•„λ‹™λ‹ˆλ‹€";
    
    // μ‹œκ°„ μΈ‘μ • 끝
    end = clock();
    result = (double)(end - start); 
    
    // κ²°κ³Ό 좜λ ₯ 
    cout << "\nresult : " << result << " microseconds" << endl; 

    return 0;
}

 

처음 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν–ˆμ„ λ•ŒλŠ”, 2^61-1이 μ†Œμˆ˜μž„μ—λ„ λΆˆκ΅¬ν•˜κ³  "μ†Œμˆ˜κ°€ μ•„λ‹™λ‹ˆλ‹€"λΌλŠ” 문ꡬ가 좜λ ₯ λ˜μ—ˆλ‹€.

 

잘λͺ»λœ κ²°κ³Όκ°€ λ‚˜μ™”λ˜ μ΄μœ λŠ” pow ν•¨μˆ˜κ°€ intλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ˜€κΈ° λ•Œλ¬Έμ΄μ—ˆλ‹€. 2^61-1은 intν˜• λ³€μˆ˜μ—λŠ” λ‹΄κΈ°μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— (long long int)둜 ν˜•λ³€ν™˜ν•˜λŠ” 과정이 ν•„μš”ν–ˆλ‹€.