wskazówka przy zadaniu z matury c++

0

witam, mam problem z tym o to zadaniem
user image
Bez nazwy-2.jpg

udało mi się uzyskać odpowiedzi do pod punktu A oraz B. Jednak z C i D jest problem. Spróbowałem zrobić na liczbach z przedziału, który jest w podpunkcie C, chociaż na 100 % trzeba zmienić coś w tym kodzie, bo za samą zmianę przedziału punktów by nie dawali. Mimo wszystko spróbowałem, trochę na wynik czekałem, ale i tak wyszedł inny niż w kluczu.
Potrzebuje jakiejkolwiek wskazówki, bo nie mam pojęcia co dalej

 #include <iostream>

int main ()
{
	using namespace std;
	int licznik=0;
	for (int naturalna=21; naturalna<=1000; naturalna++)
	{
		if (naturalna%3==1) 
		{
			bool prawda = true;
			for (int dzielnik=naturalna-1; dzielnik>1; dzielnik--)  
			{
				if (naturalna%dzielnik==0)                  
				{
					if(dzielnik%3==1) 
					prawda = false;	
				}	
			}
			if(prawda)
			licznik++; 
		}	
	}
	cout<<licznik; 
}

A to odpowiedzi:

 Za poprawną zawartość pliku zadanie4.txt zawierającego: 
•  liczbę liczb pierwszych w przedziale [1, 20] – 1 punkt 
ODP: 5 
liczbę liczb pierwszych w przedziale [21, 1000]– 2 punkty  
ODP: 168 
•  liczbę liczb pierwszych w przedziale [1001, 1000000]– 4 punkty 
ODP: 1797 
•  liczbę liczb pierwszych w przedziale [1000001, 10000000]  
– 5 punktów 
ODP: 862344
0

Ja bym proponował użyć zwykłego, starego, dobrego sita eratostenesa, po wycięciu na początku wszystkich liczb nie dających z dzielenia przez 3 reszty 1.

Spróbuj, implementacja tego powinna być prosta, a sam program szybki. Jeśli by coś nie działało to napisz, pomyślimy dalej.

Spróbowałem zrobić na liczbach z przedziału, który jest w podpunkcie C, chociaż na 100 % trzeba zmienić coś w tym kodzie, bo za samą zmianę przedziału punktów by nie dawali

A tam by nie dawali, chodzi może po prostu o wydajność algorytmu (Twój to czysty bruteforce). Btw. wygląda na poprawny, ale nie testowałem szczególnie.

0

naturalna++ - na pewno nie, to przecież Trójkołandia liczba np 22 u nich jest liczbą wyimaginowaną.

0

Masz z nudow napisalem. Przerobione sito erastotenesa. W takich zadaniach zawsze znajdujesz wymagany zbior liczb a potem zliczasz.

http://ideone.com/61Ltu5

864314 bo zlicza od 1 do 10 000 000

Jest to suma tych podanych przedzialow przez Ciebie, czyli ok.

Przerobic latwo zeby spelnilo calkowicie wymogi zadania. To juz Tobie zostawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1