исправьте пожалуйста переписанный код с python на c++

есть код на питоне:

def isPrime(x):
    check = True
    for  i in range(2,round(x**0.5)+1):
        if x%i==0:
            check = False
            break
    return check


for n in range(123456789,223456789+1):
    a = n**0.25
    if n**0.25 == round(n**0.25) and isPrime(round(n**0.25)):
        for i in range(2,round(n**0.5)+1):
            if n%i==0:
                print(f'число {n} делитель {n//i}')
                break

по окончании работы он выдаст 3 строки:

число 131079601 делитель 1225043

число 141158161 делитель 1295029

число 163047361 делитель 1442897

Пытался переписать код на плюсах, но код как будто в бесконечном цикле:

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


bool isPrime(int x)
{
    bool check = true;
    int i;
    for(int i=2;(round(pow(x,0.5)))+1;i++)
    {
        if (x%i == 0)
        {
            check = false;
            break;
        }
    }
    return check;
}


int main()
{   
    int n,i;
    for(int n=123456789;n<223456790;n++)
    {   

        double a=pow(n,0.25);
        
        
        if (pow(n,0.25) == (round(pow(n,0.25)) and isPrime(round(pow(n,0.25)))))
        {
            for (int i=2 ; i<(round(pow(n,0.5)));i++)
            {
                if (n%i==0)
                {
                    cout<<n<<'\t'<<((int)n/i);
                }
            }
        }
    }
}

Хочу понять, где я совершил ошибки(может я не так обрабатывал типы данных?) Буду очень признателен за помощь.


Ответы (1 шт):

Автор решения: Harry

Вот ваш код.

#include <iostream>

using namespace std;

bool isPrime(int x)
{
    for(int i = 2; i < sqrt(x)+1; ++i)
        if (x%i == 0) return false;
    return true;
}

int main()
{
    for(int n = 123456789; n <= 223456789; ++n)
    {
        int a = sqrt(sqrt(n));
        if (a*a*a*a == n && isPrime(a))
            for(int i = 2; i < sqrt(n)+1; ++i)
                if (n%i == 0)
                {
                    cout << "число " << n << " делитель " << n/i << endl;
                    break;
                }
    }
}

Но он и в самом деле, гм... как минимум неэффективный.

→ Ссылка