liczby pierwsze

0

Tak jak w temacie robie program na Spoju, najpierw zrobiłem ten program bez wykorzystania sita Eratostenesa oczywiście spoj wywala "przekroczono limit czasu" ,wiec zrobilem drugi program i wykorzytałem do tego celu sito lecz spoj znowu protestuje :) "przekroczono limit czasu" powie mi ktoś co moge mieć nie tak :)

#include <iostream>
using namespace std;

bool numbersTable[10000]; 
int podaj,t,j=0,tak=0;

int main()
{
	do{cin>>t;
	}while(t>100000);

	for (int i = 2; i*i <= 10000; i++ ) 
	{
		if (numbersTable[i] == true) continue; 
		for (int j = 2 * i ; j <= 10000; j += i) numbersTable[j] = true; 
	}
	while(t--)
	{
		do{cin>>podaj;
		}while(podaj>10000);

		if(podaj==0 || podaj==1) cout<<"NIE"<<endl;
		else 
		{
			
			do{
				if(numbersTable[j]==false)
				{
					if(j==podaj)
					{
						cout<<"TAK"<<endl;
						tak++;
						break;
					}
				}
				j++;
			}while(j<10000);

			if(tak==0) cout<<"NIE"<<endl;
		}
		j=0;
		tak=0;
	}
	
	cin.ignore();
	cin.get();
}
0

cin.get();
usuń to bo to oczekuje na dowolny klawisz czyż nie?
i na końcu powinno być return 0

0

Niestety to nie pomogło :/

0

możesz coś mieć nie tak ze strumieniami wejścia lub limity czasów są bardzo małe :)

0

już widze chyba na początku do{cin>>t;
}while(t>100000) chyba się walnąłeś o pare zer :P pobierasz 10 razy więcej danych :P
bo to pobiera ci T dopóki nie większe od 100k
tak samo masz przy podaj pobierasz je dopóki nie jest większe od 10k

do{cin>>podaj;
}while(podaj>10000);

            if(podaj==0 || podaj==1) cout<<"NIE"<<endl;

i to nie ma sensu bo podaj musi być większe od 10k a warunek poniżej spr czy nie jest 1 lub 0 lecz ono nigdy nie będzie 0 lub 1

0

Nie ruzmię dlaczego dawaleś do...while
Przepisany kod z niewielkimi poprawkami

#include <iostream>
using namespace std;

bool numbersTable[10000];
int podaj,t;

int main()
{
		cin>>t;

        for (int i = 2; i*i <= 10000; i++ )
        {
                if (numbersTable[i] == true) continue;
                for (int j = 2 * i ; j <= 10000; j += i) numbersTable[j] = true;
        }
        while(t--)
        {
                cin>>podaj;


                if(podaj==0 || podaj==1) cout<<"NIE"<<endl;
                else
                {
                       if(numbersTable[podaj]==true)
                       	cout << "NIE" << endl;
                       else
                       	cout << "TAK" << endl; 
                }
        }
}
Gelldur napisał(a)

już widze chyba na początku do{cin>>t;
}while(t>100000) chyba się walnąłeś o pare zer :P pobierasz 10 razy więcej danych :P
bo to pobiera ci T dopóki nie większe od 100k
tak samo masz przy podaj pobierasz je dopóki nie jest większe od 10k

do{cin>>podaj;
}while(podaj>10000);

            if(podaj==0 || podaj==1) cout<<"NIE"<<endl;

i to nie ma sensu bo podaj musi być większe od 10k a warunek poniżej spr czy nie jest 1 lub 0 lecz ono nigdy nie będzie 0 lub 1

Sadzę, ze do...while było do sprawdzenia czy liczba spełnia warunki zadania

0

do while jest po to zeby jesli ktos poda liczbe wieksza od 10000 to ma wrocic i podac nowa to tego momentu az poda mniejsza od 10000

0

Z reszta nie w tym leży problem już to sprawdzałem :)

0

dorzuc zaraz po int main()

ios_base::sync_with_stdio(0);

Ogólnie to jest jakieś magiczne, u mnie przechodzi bez tego.

0

Dzieki marseel :) problem jednak leżał w tym do while :)

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