T-primes – Codeforces – Omówienie zadania – Sito Eratostenesa

Szczegółowe omówienie zadania T-primes:

Link do powyższego omówienia zadania T-primes: https://youtu.be/btHSRzo4KMQ?t=1264
Omówienie kodu zadania T-primes: https://youtu.be/btHSRzo4KMQ?t=3732
Kroki algorytmu: https://youtu.be/btHSRzo4KMQ?t=3210
Złożoność algorytmu: https://youtu.be/btHSRzo4KMQ?t=3541

Link do treści zadania T-primes i możliwości umieszczania rozwiązań: https://codeforces.com/problemset/problem/230/B

Zadanie T-primes pokazuje zastosowanie Sita Eratostenesa: https://youtu.be/btHSRzo4KMQ?t=1749
Złożoność Sita Eratostenesa: https://youtu.be/btHSRzo4KMQ?t=2508
Kod Sita Eratostenesa: https://youtu.be/btHSRzo4KMQ?t=3764
Dlaczego zaczynamy wykreślać od i*i w sicie Eratostenesa? https://youtu.be/btHSRzo4KMQ?t=3807

Zadanie z Codeforces! https://youtu.be/gTEmPXiN53U?t=13
Pozwala stworzyć fantastyczne CV! https://youtu.be/gTEmPXiN53U?t=5557


Jak się uczyć na podstawie tego zadania? https://youtu.be/QgLyXYmFQeU?t=2019
Pamiętaj by zajrzeć max 1 raz – wtedy się rozwijasz: https://youtu.be/pkLXuuOe_qA?t=3625

Lista zadań z rozwiązaniami: https://oki.org.pl/lista-zadan-materialy.php
Samouczek – przygotowanie do Olimpiad: https://oki.org.pl/tutorial/
Zajęcia: : https://oki.org.pl/harmonogram-zajec/

Warto startować w Olimpiadzie Informatycznej!
https://youtu.be/K7fZfJ8nN6A?t=109


Kod C++ programu T-primes, który jest omówiony w powyższym filmie i który otrzymuje 100%


#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 7;
bool zlozona[MAXN];
// zwraca pierwiastek z x jeżeli jest całkowity
// -1 w przeciwnym wypadku
int BinarySearch(long long x)
{
int lewo = 1;
int prawo = 1e6;
while (lewo < prawo) {
int srodek = (lewo + prawo) / 2;
if ((long long)srodek*srodek >= x)
prawo = srodek;
else
lewo = srodek + 1;
}
if ((long long)lewo*lewo != x)
return -1;
return lewo;
}
// sito Eratostenesa
void sito()
{
for (int i = 2; i * i < MAXN; i++) {
if (zlozona[i] == false) {
for (int j = i * i; j < MAXN; j += i)
zlozona[j] = true;
}
}
}
int main()
{
ios_base::sync_with_stdio(0), cin.tie(0);
sito();
zlozona[1] = true; // to nie jest prawda, ale przyda się na potrzeby zadania
int n;
cin >> n;
for (int i = 1; i <= n; ++i) {
long long x;
cin >> x;
int pierwiastek = BinarySearch(x);
if ((pierwiastek == -1) || (zlozona[pierwiastek]))
cout << "NO\n";
else
cout << "YES\n";
}
return 0;
}
Kod C++ programu T-primes, który jest omówiony w powyższym filmie i który otrzymuje 100%

 


Kod Python programu T-primes, który otrzymuje 100%:

MAXN = 1000000 + 7
zlozona = [False] * MAXN
# zwraca pierwiastek z x jeżeli jest całkowity
# -1 w przeciwnym wypadku
def BinarySearch(x):
lewo = 1
prawo = 1000000
while (lewo < prawo): srodek = (lewo + prawo) // 2 if (srodek*srodek >= x):
prawo = srodek
else:
lewo = srodek + 1
if (lewo*lewo != x):
return -1
return lewo
# sito Eratostenesa
def sito():
i = 2
while (i * i < MAXN):
if (zlozona[i] == False):
for j in range(i*i, MAXN, i):
zlozona[j] = True
i += 1
sito()
zlozona[1] = True # to nie jest prawda, ale przyda się na potrzeby zadania
n = int(input())
liczby = map(int, input().split())
for x in liczby:
pierwiastek = BinarySearch(x)
if ((pierwiastek == -1) or (zlozona[pierwiastek])):
print("NO")
else:
print("YES")

Nie dodano jeszcze komentarza, rozpocznij dyskusję pierwszy.

Dodaj komentarz