исправьте пожалуйста переписанный код с 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;
}
}
}
Но он и в самом деле, гм... как минимум неэффективный.