• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

std::ios_base::sync_with_stdio(0);

Object Storage Arubacloud
0 głosów
10,244 wizyt
pytanie zadane 28 czerwca 2016 w C i C++ przez am49 Początkujący (420 p.)

Witam :) Napisałam program mający sprawdzać, które z zadanych liczb są pierwszymi. Najpierw ilość testów (t), potem liczby - program wyświetla "TAK" lub "NIE". Wykorzystuję sito Eratostenesa. Ponoć dodanie linijki  std::ios_base::sync_with_stdio(0); przyśpiesza działanie strumieni. Dodałam ją na samym początku maina, przed zmiennymi, ale o ile bez niej czas wykonania wynosił 1.83 s, teraz wynosi 2.03 s. Dlaczego? 

#include <iostream>
#include <stdio.h>
#include <math.h>

int main() {
	std::ios_base::sync_with_stdio(0);
	int j, zakres = 10000, pierwiastek, t, n;
	int * tablica = NULL;
	tablica = new int[100000];
	pierwiastek = floor(sqrt(zakres));

	for (int i = 1; i <= zakres; i++)
		tablica[i] = 1;

	for (int i = 2; i <= pierwiastek; i++) {
		if (tablica[i] != 0) {
			j = i + i;
			while (j <= zakres) {
				tablica[j] = 0;
				j += i;
			}
		}
	}

	std::cin >> t;
	bool y;
	for (int k = 0; k < t; k++) {
		std::cin >> n;
		for (int m = 2; m < zakres; m++) {
			if (tablica[m] != 0) {
				if (n == m) {
					std::cout << "TAK\n";
					y = 1;
					break;
				}
				else y = 0;
			} 		
		}
		if ((n == 0) || (n == 1)) {
			std::cout << "NIE\n";
			continue;
		}

		if (y == 0) {
			std::cout << "NIE\n";
		}
	}
	delete[] tablica;
	return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 28 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
wybrane 1 lipca 2016 przez am49
 
Najlepsza

Nie wiem, czy przyśpiesza (nigdy się z tym nie spotykałem), ale na moje to by prędzej spowalniało niż przyśpieszało.
W dokumentacji cpp: http://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
Napisane jest, że zapis: std::ios_base::sync_with_stdio(0);
powoduje, usunięcie zsynchronizowania strumieni z c++ i c.. inaczej mówiąc najpierw wykonają się wszystkie polecenia wyjścia dla C, a potem dopiero dla C++.. nie wiem jak to dokładnie działa.. opieram się na tym linku i przykładzie tam podanym. x)

komentarz 28 czerwca 2016 przez am49 Początkujący (420 p.)

Ja szukałam jedynie na polskich stronach, i na przykład tutaj: 

http://oi.edu.pl/old/php/show.php?module=show&file=oi15/przyklady

mamy zapis: "W przypadku używania strumieni wyłączenie synchronizacji wejścia/wyjścia przy pomocy polecenia ios_base::sync_with_stdio(0); jest konieczne ze względów wydajnościowych."

Ale jeśli słuchać Twojej dokumentacji, to w sumie po co wyłączać, skoro spowalnia? :)

komentarz 28 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
Znalazłem jeszcze taki link.. fajnie ktoś wyjaśnił mechanikę działania tego:
http://stackoverflow.com/questions/31162367/significance-of-ios-basesync-with-stdiofalse-cin-tienull
komentarz 29 czerwca 2016 przez am49 Początkujący (420 p.)
Dziękuję, rozumiem już mechanikę działania, ale wpływu na czas wykonania nadal nie.
+1 głos
odpowiedź 28 czerwca 2016 przez Corazzo Obywatel (1,040 p.)
Co do kodu tak na szybko: Czemu nie zerujesz zmiennych? 9 linijka tablica domyślam się, że miała być 10000 elementowa, a nie 100000? 13 linijka - pamiętaj tablice indeksujemy od 0, np. dla tablicy 3 elementowej to będzie: tab[0], tab[1], tab[2] i odwołanie się do tab[3] to będzie już wyjście poza zakres tablicy :-)
komentarz 29 czerwca 2016 przez am49 Początkujący (420 p.)
Dziękuję za wszystkie podpowiedzi :) Dla takiego samouka jak ja każda rada wiele znaczy. Dzięki!
0 głosów
odpowiedź 28 czerwca 2016 przez niezalogowany
Może testujesz w wersji Debug?
komentarz 29 czerwca 2016 przez am49 Początkujący (420 p.)
Niestety nie jestem jeszcze tak zaawansowana :)

Podobne pytania

0 głosów
1 odpowiedź 5,118 wizyt
pytanie zadane 23 kwietnia 2015 w C i C++ przez 1110200039910 Gaduła (4,630 p.)
+1 głos
2 odpowiedzi 245 wizyt
pytanie zadane 7 grudnia 2015 w C i C++ przez WoGX Nowicjusz (180 p.)
0 głosów
1 odpowiedź 355 wizyt
pytanie zadane 28 marca 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...