Löse den AtCoder-Anfängerwettbewerb 170 D - Nicht teilbar (ABC170D) mit Python (Eratostenes-Sieb)

Hallo. Ich habe mit diesem Problem während des Wettbewerbs und TLE eine Doppelschleife gemacht. Ich erinnere mich noch nicht an den grundlegenden Algorithmus, daher möchte ich ihn richtig verwenden können. Dieses Problem scheint viel Rechenaufwand zu ersparen, wenn Sie dasselbe Prinzip wie das Eratostenes-Sieb verwenden.

code.py


N = int(input())
A = list(map(int, input().split()))
A.sort()                  #Sortieren zum Sieben von Elatostines
Amax = A[-1]
dp = [1]*(Amax+1)         #Machen Sie ein Sieb von Eratostenes bis zum Maximalwert von A.
ans = 0
for i in range(len(A)-1):
  p = A[i]
  if dp[p] == 1:          #A[i]Ist ein[j]Überprüfen Sie, ob es sich um ein Vielfaches von handelt
    for q in range(Amax//p+1):
      dp[p*q] = 0         #A[i]Stellen Sie alle Vielfachen von ein
    if A[i] != A[i+1]: 
      ans += 1            #A[i]Zählen, wenn sich nicht überlappt
if dp[Amax] == 1:         #Da der Bereich bei der Suche nach Duplikaten überschritten ist, wird nur Amax separat beurteilt.
  ans += 1
print(ans)

dp ist im Ausgangszustand dp = [1 1 1 1 1 1 1 ...].

Zum Beispiel Wenn A [0] = 3 ist, ist der dp nach einer Operation dp = [0 1 1 0 1 1 0 ...].

Recommended Posts

Löse den AtCoder-Anfängerwettbewerb 170 D - Nicht teilbar (ABC170D) mit Python (Eratostenes-Sieb)
Löse den AtCoder-Anfängerwettbewerb159 D - Verbotenes K (ABC159D) mit Python (Anzahl ist zu langsam!)
Löse AtCoder ABC168 mit Python (A ~ D)
AtCoder Anfängerwettbewerb: D Problemantworten Python
Löse AtCoder 167 mit Python
Löse "AtCoder Version! Arimoto (Anfänger)" mit Python!
Löse AtCoder ABC166 mit Python
Atcoder Anfänger Wettbewerb 152 Kiroku (Python)
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
Löse ABC166 A ~ D mit Python
Beheben von AtCoder-Problemen Empfehlung mit Python (20200517-0523)
AtCoder Anfängerwettbewerb 174 C Problem (Python)
[AtCoder] Löse ABC1 ~ 100 Ein Problem mit Python
[At Coder] Anfängerwettbewerb 175 Einführung in die ABCD-Python-Lösung
AtCoder Anfängerwettbewerb 177
[AtCoder] Lösen Sie ein Problem von ABC101 ~ 169 mit Python
AtCoder Anfängerwettbewerb 179
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
AtCoder Anfängerwettbewerb 172
AtCoder Anfängerwettbewerb 180
AtCoder Beginner Contest 169, D. Div Spiel-Funktionscode
AtCoder Anfängerwettbewerb 173
Eratostenes Sieb (Python Edition)
Atcoder Anfänger Wettbewerb 153
AtCoder Anfängerwettbewerb 176 C Problem "Schritt" Erklärung (Python3, C ++, Java)
[Python] [BFS] Beim Coder-Anfängerwettbewerb 168-D [.. Double Dots]
AtCoder Anfängerwettbewerb 152 Rückblick
AtCoder Anfängerwettbewerb 181 Hinweis
Löse ABC168D in Python
Löse ABC167-D mit Python
AtCoder Beginner Contest 160 Bewertung
AtCoder Anfängerwettbewerb 178 Bewertung
AtCoder Anfängerwettbewerb 180 Hinweis
AtCoder Anfängerwettbewerb 166 Bewertung
AtCoder Anfängerwettbewerb 167 Bewertung
AtCoder Anfängerwettbewerb 182 Hinweis
AtCoder Beginner Contest 164 Bewertung
AtCoder Beginner Contest 169 Bewertung
AtCoder Beginner Contest 181 Bewertung
AtCoder Beginner Contest 171 Bewertung
AtCoder Beginner Contest 182 Bewertung
AtCoder Beginner Contest 180 Bewertung
Löse Mathe mit Python
AtCoder Anfängerwettbewerb 156 WriteUp
AtCoder Anfängerwettbewerb 177 Rückblick
AtCoder Anfängerwettbewerb 168 Bewertung
Löse ABC159-D in Python
AtCoder Beginner Contest 179 Bewertung
AtCoder Beginner Contest 167 Memorandum
AtCoder Beginner Contest 172 Bewertung
AtCoder Anfängerwettbewerb 183 Hinweis
AtCoder Anfängerwettbewerb 176 Bewertung
AtCoder Anfängerwettbewerb 184 Hinweis
AtCoder Anfängerwettbewerb 175 Bewertung
AtCoder Anfängerwettbewerb 174 Bewertung
AtCoder Beginner Contest 153 Bewertung
AtCoder Anfängerwettbewerb 156 Bewertung
AtCoder Beginner Contest 161 Bewertung