2016-11-23 5 views
1

Ich gehe durch das Level 03 'Euler Projekt. Hier ist mein Code und ich verstehe immer noch nicht, warum es nicht funktioniert. Ist es ein Mathematikproblem? Es gibt eine Kompilierung, aber das Ergebnis ist falsch. Es gibt alle Faktoren einer Zahl, und nicht nur die Primzahlen. Könnte jemand einen Blick darauf werfen? Dank BRC++ - Euler Projekt - 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

Sie sagen nicht einmal, welches Problem Ihr Code lösen soll. Ich meine, um was geht es bei Level 3 Euler? Was ist daran falsch? Erhalten Sie irgendwelche Fehler? Welche? Bitte fügen Sie sie in die Frage ein. – ForceBru

+0

Sorry, hier ist das Euler-Problem: "Die Primfaktoren von 13195 sind 5, 7, 13 und 29. Was ist der größte Primfaktor der Nummer 600851475143?" Mein Problem ist tatsächlich, ich habe alle Faktoren, mein Code wählt die Primzahlen nicht aus. – nolw38

+0

Projekt Euler ist zum Lernen. Es hilft nicht wirklich, überall Lösungen zu finden. Du kannst immer noch eine bestimmte Frage zu etwas stellen, an dem du feststeckst. – stefaanv

Antwort

0

Es gibt zwei Fehler in

uint64_t factprem(uint64_t n) 

1. In für Loop-Start von

i=2 

statt i = 1

2.Function sollte so aussehen

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

Es funktioniert !!!!!!! Vielen Dank !!! Aber warum ist der Start von i = 2 so wichtig? – nolw38

+0

In Funktion überprüft es, ob i ein Teiler von n ist, wenn i = 1, dann ist i ein Teiler von n (für jedes n, weil 1 der Teiler jeder Zahl ist) und es zeigt, dass n nicht prim ist, während es ist. Wenn Sie es haben vergessen Sie nicht, als Antwort zu markieren. – Sniper