๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐“ก๐“ธ๐“ธ๐“ถ๐Ÿฃ: ๐’œ๐“๐‘”๐‘œ๐“‡๐’พ๐“‰๐’ฝ๐“‚/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

BOJ1016 : ์ œ๊ณฑใ„ดใ„ด์ˆ˜ (Gold 1)

#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;

int save[1000001] = {
    0,
};
void checkfunc(unsigned long long start, unsigned long long end)
{
    int a = end - start;
    for (unsigned long long i = 2; i <= sqrt(end); i++)
    {
        unsigned long long tmp = pow(i, 2);
        long double k = ceil((long double)start / (long double)tmp);

        for (long long j = (long long)k; tmp * j <= end; j++)
        {
            save[tmp * j - start] = 1;
            //  cout << tmp * j << "true\n";
        }
    }
}

int main()
{
    unsigned long long min, max;
    unsigned long long cnt = 0;
    cin >> min >> max;
    checkfunc(min, max);
    for (int i = 0; i <= max - min; i++)
    {
        if (save[i] == 1)
            continue;
        else
            cnt++;
    }
    cout << cnt;
}