Sida 1 av 1

Hitta primtal i C++, problem. [LÖST]

Postat: 01 maj 2014, 12:30
av ZerQ
Hej

Jag håller på med en skoluppgift som ska hitta alla primtal mellan 1 till n. Jag har skrivit koden, programmet körs och fungerar nästan, jag får fram alla prims men även också sammansatta tal vars faktorer är prims...

Så här kan min utskrift se ut:
3, 5, 7, 9, 11, 13, 17, 19, 23, 25

Talen 9, 25, är ju sammansatta tal men jag får inte bort dom...

Har gått bet hur jag ska ändra koden för att bara få fram äkta prim... Koden är nedan

Kod: Markera allt

/*	==================================================================
*	Primtals Finder
*
*	Programmer:	Johnny Lindberg
*	Date:		2014-05-01
*	Version:	0.01 (beta)
*
*	Description:
*	Detta program kontrollerar efter primtal till av användaren angivet 
*	tal. Programmet ska kunna räkna ut vilka som är primtal genom en 
*	enkel algoritm.
*	================================================================*/
#include <iostream>
#include <math.h>

using namespace std;

// Funktionsprototyper
void SkrivUtText();
bool PrimFinder(int);

// Main funktion
int main()
{
	short int siKandidat;
	SkrivUtText();
	cin >> siKandidat;
	cout << "\nPrimtal funna upp till ditt inmatade tal.\n";
	if(siKandidat >= 2)
	{
		cout << "2" << " ";
	}
	// Kör en for-loop för att kolla varje tal upp till mitt inmatade
	for(short int i = 3; i < (siKandidat + 1); i += 2)
	{
		if(PrimFinder(i))
		{
			cout << i << " ";
		}
	}
	
	cout << "\n\n";
	system("PAUSE");
	return 0;
}

// Funktion för att skriva ut lite välkomsttext
void SkrivUtText()
{
	cout << "MADZerQ's Primtals Finder - Du \x84r primad...\n";
	cout << "Detta program letar efter primtal upp till det\n";
	cout << "tal som du anger.\n";
	//cout << "Tiden det tar att hitta talet\n";
	//cout << "kommer ocks\x86 att skrivas ut tillsammans med\n";
	//cout << "primtalen.\n\n";
	cout << "Ange det tal som du vill stoppa vid, avsluta med enter: ";
}

// Funktion för att hitta primtal, tar ett heltal som argument
bool PrimFinder(int iPrim)
{
	
	// Kontrollera talet och returnera falskt om det inte är ett primtal, annars sant!
	for(short int i = 3; i < sqrt(double(iPrim)); i++)
	{
		if(iPrim % i == 0)
		{
			return false;
		}
	return true;	
	}
	
}

Re: Hitta primtal i C++, problem.

Postat: 01 maj 2014, 14:17
av Osprey
Prova med att lägga det sista "return true;" utanför snurran istället... ;)

Re: Hitta primtal i C++, problem. [LÖST]

Postat: 01 maj 2014, 14:35
av ZerQ
Hjärndunk i skrivbordet... :o

Osprey:
Tack så mycket, vad enkelt det vart då... Du har räddat min dag idag :)

Re: Hitta primtal i C++, problem.

Postat: 03 maj 2014, 13:57
av mcNisse
Du missar det första primtalet ;-)