2 / 277
Jun 2016

Zastanawiam się jak w tym168 zadaniu można uzyskać czas 0.00(wieeeeele osób tyle ma i to wielu rożnych językach)?? Ja próbowałem wszystkiego(wszystkiego co przyszło mi do mojej ograniczonej głowy...) i najlepszy mój wynik to 0.17 gdy po prostu stworzyłem tablice wszystkich liczb pierwszych do 101 i sprawdzałem wszystko po kolei aż do przekroczenia wartości pierwiastka z badanej liczby.
Wrzuciłbym swój kod ale nie wiem czy można umieszczać działające programy więc na razie się wstrzymam.
Czy istnieje jakaś super tajna metoda(bardziej tajna od sita Eratostenesa bo ona przy mojej implementacji uzyskuje czas powyżej 0.20)?

  • created

    Jun '16
  • last reply

    May '23
  • 276

    replies

  • 8.4k

    views

  • 90

    users

  • 41

    likes

  • 50

    links

Frequent Posters

There are 276 replies with an estimated read time of 27 minutes.

liczba liczb do przetestowania może wynieść do 100 000 a liczby mogą być od 1 do 10 000. Tak więc muszą się powtarzać w testach, tablica booleanów w połączeniu z pierwszymi do 101 pozwoli ci zejść do 0.01s. Jak zrobić to jeszcze szybciej? Być może trzeba "mieć ją gotową" a nie tworzyć w trakcie pracy programu.

1 month later

include

using namespace std;
int n,a,z;
int main()
{
cin >>n;
for (int i=0;i {
cin>>a;
if (a<2)
z=1;
if (a==2)
z=0;
if (a>2)
{
z=0;
if (a%2==0)
z+=1;
for(int j=2;j*j<=a;j++)
if (a%j==0)
z+=1;
}
if (z==0)
cout <<"tak"< else
cout <<"nie"<

}
return 0;

}
Pomoże ktoś czemu sędzia mówi ze nie działa ???

Kod dajemy w tagach dostępnych pod ctrl + shift + c, lub lepiej linkuj do ideone. Inaczej brakuje fragmentów jak u ciebie. Aczkolwiek już widzę że piszesz tak i nie małymi literami a powinno być dużymi (komputer porównuje twoje odpowiedzi z wzorcem, więc duże i małe litery są rozróżniane)

int n,liczba;

int main()
{
cin>>n;

for(int i=1; i<=n;i++)
{
    cin >> liczba;
    if(liczba < 2)
        cout << "NIE" << endl;
    else if(liczba == 2)
        cout << "TAK" << endl;

    else
        for(int w=2; w < liczba; w++)
    {
        if(liczba % w == 0)
        {
            cout << "NIE" << endl;
            break;
        }
        if(liczba % w != 0)
        {
             cout << "TAK" << endl;
             break;
        }


    }
}
return 0;

}

Ktoś ma pomysł dlaczego nie działa? Ja sprawdzałem już tyle możliwości i nie mam pomysłu :frowning:

Bo ten kod sprawdza tylko parzystość liczby, wejdź tutaj296 i spójrz na input oraz output pod spodem, w tym ostatnim powinno być 3x NIE (3 * 3, 7 * 7, 11 * 11)

16 days later
using System;

namespace LiczbyPierwsze
{
    class Program
    {
        static void Main(string[] args)
        {
            bool itIs = false;
            for (int n = 1; n <= 10000; n++)
            {
                itIs = true;
                for (int i = 2; i * i <= n; i++)
                {
                    if (n % i == 0)
                        itIs = false;
                }
                if (n == 1)
                    itIs = false;
                if (itIs)
                    Console.WriteLine(n + " TAK");
                else
                    Console.WriteLine(n + " NIE");
            }
            Console.ReadLine();
        }
    }
}

Błąd wykonania. Może ktoś podpowiedzieć co jest źle?

Pisze w c++.
Ktos moze mi powiedzieć dlaczego sędzia mi to odrzuca?

include

using namespace std;

int main()
{
int ile;
int a;

cin>>ile;
for (int i=0;i<ile;i++)
{
    cin>>a;
    if(a==1)
        cout<<""<<endl;
    else if((a==3)||(a==5)||(a==7)||(a==2))
        cout<<"Tak"<<endl;
    else if((a%2==0)||(a%3==0)||(a%5==0)||(a%7==0))
        cout<<"Nie"<<endl;
    else
        cout<<"Tak"<<endl;
}
return 0;

}

Kod dajemy w znacznikach dostępnych pod ctrl + shift + c albo linkujemy do ideone. Dzięki temu będzie w całości. Aczkolwiek już widzę że sprawdzasz za mało liczb, dla testu
2
121
169

Masz
Tak
Tak

a powinno być 2x NIE (wielkość liter ma znaczenie), bo to 11 * 11 i 13 * 13.

Witam, bardzo proszę o informacje dlaczego ten kod nie działa?
Listę z liczbami pierwszymi również wygenerowałem w oddzielnym programie i wszystko wydaje się być dobrze. Może jest jakiś problem z output-em?

liczby_str=input()
temp=liczby_str.split('\n')
liczby=[int(i) for i in temp]

liczby_pierwsze=[]   # lista z liczbami pierwszymi z zakresu 1 do 10000

for i in liczby[1:liczby[0]+1]:
    if i in liczby_pierwsze:
        print('TAK')
    else:
        print('NIE')

Zakładając że to Python, input() wczyta ci pojedynczą linię a nie całe wejście. Jako że w tym zdaniu każda liczba jest w osobnej linii, musisz wsadzić dodatkowego do for-a żeby wczytywał liczby do sprawdzenia.

Teraz działa raczej dla wszystkich przypadków, a i tak mam że błędna odpowiedź. Ktoś pomoże?

include

include

using namespace std;

int main()
{
int ile,a,p=1,k;
cin>>ile;
for (int i=0;i<ile;i++)
{
cin>>a;
k=sqrt(a);
for (int j=2;j<=k;j++)
{
if (a<2)
{
cout<<""<<endl;
break;
}
if (a%j==0)
{
p++;
}
}
if(p>1)
{
cout<<"NIE"<<endl;
}
else
{
cout<<"TAK"<<endl;
}
p=1;
}
}

Kody dajemy w znaczniku dostępnym pod ctrl + shift + c, lub też linkujemy do ideone. Na szczęście wycieło tylko include-y wiec mogłem sprawdzić i daje ci błędny wynik dla 1 (takowa nie jest liczbą pierwszą wbrew temu co twierdzi twój program. Jest też w zestawie przykładowym wiec powinieneś sam to zauważyć). Naprawiłem to i sędzie zaliczył.

Witam. Mimo jak mi się wydaje dobrze działającego programu nie zalicza mi go. Proszę dlatego o pomoc, wytłumaczenie co może być nie tak.

#include <iostream>

using namespace std;

int n;
int x;
int ile;
int main()
{
    cin >> n;

    for (int i=0; i<n; i++){
    ile = 0;
        cin >> x;
        for ( int j=1; j<=x; j++)
        {
            if(x%j == 0)
            {
            ile++;
            }
        }
        if (ile == 2){
        cout << "TAK";
        } else cout << "NIE";
    }


    return 0;
}

mam pytanie czemu jak mam program w takiej postacji:

include

using namespace std;

int main()
{
int a , ile;
cin >> ile;

for ( int i = 1 ; i <=ile ; i++ )
{
    cin >> a;
    if ( a == 1 || a == 0)
    {
        cout << "NIE" << endl;
    }
    else if ( a == 2 || a == 3 || a == 5 || a == 7)
    {
        cout << "TAK" << endl;
    }
    else if (  (a%2==0) || (a%3==0) || (a%5==0) || (a%7==0) )
    {
        cout << "NIE" << endl;
    }
    else
    {
        cout << "TAK" << endl;
    }
}
return 0;

}

to wszystko gra. Natomiast dlaczego sędzia nie chce przyjąć tego kodu?? Natomiast jak mam w takiej postaci to wszystko się sypie??

include

using namespace std;

int main()
{
int a , ile;
cin >> ile;

for ( int i = 1 ; i <=ile ; i++ )
{
    cin >> a;
    if ( a == 2 || a == 3 || a == 5 || a == 7)
    {
        cout << "TAK" << endl;
    }
    else if (  (a/2) || (a/3) || (a/5) || (a/7) )
    {
        cout << "NIE" << endl;
    }
    else
    {
        cout << "TAK" << endl;
    }
}
return 0;

}