Как найти простые множители числа в с ++?

Я пытаюсь ответить на 3-й вопрос проекта Эйлера, но не получаю желаемого результата. Моя логика:

  1. Перечислите все факторы числа 13195 и сохраните их в массиве.
  2. Проверьте, является ли каждое число в массиве простым числом.
  3. Если число найдено простым, сохраните его в другом массиве.
  4. отобразить содержимое второго массива.
  5. Надеюсь, что он содержит только основные факторы.

РЕЗУЛЬТАТ: первый массив содержит все факторы, как и ожидалось, второй, я думаю, дублирует первый массив или проскальзывает в некоторых не простых числах, пожалуйста, помогите! 🙂

Мой код:

#include <iostream>

using namespace std;

long int x,y=2;
long int number=13195;
long int f[1000000],ff[1000000];
int st=1;
int open=0;
int open2=0;
int a=0;
bool isprime;

int main()
{

for(x=1;x<=number;x++)
{
if(number%x==0)
{
f[a] = x;
a++;
}
}
while(st<=16)
{
while(y<f[st])
{
if(f[st]%y==0 && f[st]!=y)
{
break;
}
else if(f[st]%y!=0 && f[st!=y])
{
ff[open] = f[st];
}
y++;
}
open++;
st++;
}
for(open2=0;open2<open;open2++)
{
cout<<ff[open2]<<" is a prime factor of "<<number<<"\n";
}
return 0;
}

используя это для нахождения основных работ:

while(st<=a){
int k = f[open];
for(int i=2;i<k;i++)
{
if(k%i==0)
{
isprime = false;
break;
}
else if(f[open]!=0 && f[open]%i!=0 && f[open]!=i)
{
isprime =true;
}

}
if(isprime==true)
{
ff[st] = k;
open3++;
isprime = false;
}
open++;
st++;
}
cout<<"The primes of them are "<<open3<<"."<<"\n";
cout<<"Press RETURN to show them."<<"\n";
cin.get();
for(open2=0;open2<=open3;open2++)
{
cout<<ff[open2]<<" is a prime factor of "<<number<<"."<<"\n";
}

2

Решение

Почему ты не пытаешься

for(x=1;x<=number;x++)
{
if(number%x==0 && isPrime(x))
{
f[a] = x;
a++;
}
}

..
..

int isPrime(int x)
{

for(int i=2;i<=x/2;i++)
{
if(x%i==0)
return 0;
}
return 1;
}
2

Другие решения

По крайней мере:

else if(f[st]%y!=0 && f[st!=y])

должно быть

else if(f[st]%y!=0 && f[st]!=y)

Во-первых, вы пытаетесь всегда получить доступ f[0] или же f[1] при выполнении f[st!=y],

0

По вопросам рекламы [email protected]