2016-11-23 2 views
1

Я иду через проект эйлеров уровня 03. Вот мой код, и я до сих пор не понимаю, почему он не работает. Это проблема математики? Существует компиляция, но результат является ложным. Есть все число факторов, и не только простые числа. Может ли кто-нибудь взглянуть на него? Благодаря BRC++ - Euler Project - Level 03

#include <iostream> 
    #include <string> 
    #include <vector> 
    #include <cmath> 
    #include <cstdint> 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
void facteursden(std::vector<uint64_t>& facteursden, uint64_t number) 
{ 

    uint64_t i = 2; 

    for (i = 1; i <= number; ++i) { 
     if (number % i == 0) { 
      facteursden.push_back(i); 
     } 
    } 
} 
////////////////////////////////////////////// 
uint64_t factprem(uint64_t n) 
{ 
    uint64_t i = 1; 

    for (i = 1; i*i < n; ++i) { 
    if (n % i != 0) 
return 1; } 
return 0; 
} 

/////////////////////////////////////////////////////////////////////////// 
int main() 
{ 

    std::vector<uint64_t> monTableau1; 
    facteursden(monTableau1, 49); 
uint64_t i = 0; 
for (i = 0; i < (uint64_t)monTableau1.size(); ++i) { 
if (factprem(monTableau1[i]) == 1) { 
std::cout << monTableau1[i] << std::endl; }} 

return 0 ; 
} 
+0

Вы даже не говорите, какую проблему должен решить ваш код. Я имею в виду, о чем этот уровень 3 Эйлера? Кроме того, что в этом плохого? Вы получаете какие-либо ошибки? Какие? Пожалуйста, включите их в вопрос. – ForceBru

+0

Извините, вот проблема эйлера: «Первичные коэффициенты 13195 - это 5, 7, 13 и 29. Что такое наибольший простой коэффициент числа 600851475143?» Моя проблема на самом деле, у меня есть все факторы, мой код не выбирает простые числа. – nolw38

+0

Project Euler предназначен для обучения. Это действительно не помогает принимать решения повсеместно. Вы все еще можете задать конкретный вопрос о том, что вы застряли. – stefaanv

ответ

0

Там две ошибки в

uint64_t factprem(uint64_t n) 

1. В для начала петли из

i=2 

вместо я = 1

2.Function должен выглядят так

uint64_t factprem(uint64_t n) 
{ 
uint64_t i = 1; 

for (i = 2; i*i <=n; ++i) { 
    if (n % i == 0) 
return 0; } 
return 1; 
} 
+0

Это работает !!!!!!! Благодаря !!! Но зачем начинать с i = 2 так важно? – nolw38

+0

В функции проверяется, является ли i дивизором n, если i = 1, то i является делителем n (для любого n, потому что 1 - это каждый делитель числа), и он покажет, что n не является простым, в то время как оно является. Если вы его не забыли пометить как ответ. – Sniper