92 / 277
Aug 2017

Cześć Wam, mam problem z zadaniem: http://www.spoj.com/problems/PRIME1/2
Mianowicie za każdym razem otrzymuję wynik "time limit exceeded". Dlaczego? Jakieś podpowiedzi?

include

include

using namespace std;

int number;
int counter = 0;
int *wsk = &counter;

int count();
void range(int[], int, int*);
void prim(int[], int);

int main() {
int n = 0;
int *array = new int[n];
int i = 0;
n = count();
//cout << n << endl;

while (i < n) {
	range(array, n, &counter);
	i++;
}

//for (int i = 0; i < 2*n; i++) {
//	cout << array[i] << endl;
//}
n = n*2-1;

prim(array, n);



system("pause");

return 0;

}

int count() {
int n;
cout << "Podaj ilość zakresów\n";
cin >> n;
return n;
}

void range(int array[], int n, int *wsk) {
int a, b;
while (counter<2*n) {

	cin >> a;
	array[counter] = a;
	counter++;

	cin >> b;		
	array[counter] = b;
	counter++;

//	cout << endl<<array[counter - 2] << endl << array[counter-1];
}

}

void prim(int array[], int n) {

int i = 0;
int dol, gora, modulo,licznik;
int flaga = 1;
while (i <= n ){
	dol = array[i];
	gora = array[i + 1];
	
	if (dol == 1)
		dol++;

	for (dol; dol <= gora; dol++) {
		
		licznik = 2;
		modulo = dol % licznik ;
		while (modulo != 0 && licznik<dol/2) {
			licznik++;
			modulo = dol % licznik;
			if (modulo != 0)
				flaga = 0;
			else
				flaga = 1;
			
		}
		
	
		if (dol == 2 || dol ==3)
			flaga = 0;
		if (flaga == 0)
			printf("%d\n", dol);
			
			//	cout << dol << endl;
		flaga = 1;
	}


	i+=2;
	printf("\n");
}

}

13 days later

proszę bardzo:

1) przeczytaj ten wątek (cały)
2) przeczytaj ogólnie dostępne, podstawowe informacje o liczbach pierwszych
3) wyrzuć ten kod
4) napisz program od początku

Hej :slight_smile: Zwracam się z prośbą o pomoc :slight_smile: W mojej opinii wyniki wychodzą prawidłowo, wydaje mi się, że problem jest wtedy, gdy podaję liczbę do sprawdzenia większą niż 10000, ale nie jestem pewien czy o to chodzi... Podaję kod http://pl.spoj.com/submit/PRIME_T/id=200049428, będę wdzięczny za pomoc i ocenę jakości kodu :wink:

Wysłany kod pod tym linkiem widzisz tylko Ty.

Myślałem, że autor sam się domyśli :wink: Szczególnie, że gdziekolwiek nie spojrzeć ludzie inaczej wklejają kod, takie wpadki sporadycznie zdarzały się innym, a do tego kod na SPOJu ma być niejawny.

No to teraz pogadamy :wink:

  1. if (liczba_testow < 100000) - wywalić to. Warunki zadania są dane przez autora i nie należy ich sprawdzać. To samo dotyczy dalszej części zadania, np. sprawdzania, czy liczba nie jest ujemna.
  2. Twój program nie działa nawet dla przykładowego wejścia więc najpierw zrób tak, żeby w ogóle był choć cień szansy, że on działa, a po tej poprawce wstaw kod i szukam dalej :wink:

To nie jest przykładowe wejście. Patrz: treść zadania.

Insza inszość, że dla podanych przez Ciebie danych też działa źle :stuck_out_tongue:

Dobra, już sobie poradziłem :slight_smile: Błąd był śmieszny, aż wstyd się przyznać... -.-

Dzięki tarpauwatratar za chęć pomocy, fajnie, że ktoś się interesuje przynajmniej na tym forum :slight_smile:

Przyzwyczajaj się :wink: Błędy są na ogół śmieszne, głupie i wstyd się do nich przyznać :wink: Niemniej na błędach ludzie uczą się najwięcej.

Interesuje się więcej osób niż ja :wink: Kwestia tego, że niewielu ma czas by pomagać (za darmo).

No tak, kasa kasa kasa :stuck_out_tongue: Za darmo nawet już w ryj nie można dostać...

Tak, ale jest jeszcze inna sprawa. Patrolowanie SPOJa zajmuje dużo czasu, a trzeba też zarobić na życie :wink:

PS
Poszukaj czegoś o sicie Eratostenesa. Na przyszłość.

Oj nie narzekaj, mogę Ci dać, jak już tak prosisz :wink:

1 month later

zgadzam się, że niby działa, z podkreśleniem niby

a czy dla danych testowych w zadaniu dostajesz właściwy wynik ?