Informatică, întrebare adresată de infooo3553, 8 ani în urmă

Ma poate ajuta cineva cu o explicatie mai detaliata la aceasta rezolvare?

a=int(input('a='))
b=int(input('b='))
for i in range(a+1,b):
prim=True
for j in range(2,int(i/2)+1):
if i%j==0:
prim=False
if prim:
print(i)

Nu inteleg cum alege programul numerele care sunt prime

Răspunsuri la întrebare

Răspuns de RoTakX
1

Răspuns:

Explicație:

Primele două linii iți sunt clare, programul citește variabilele

El va afișa toate numerele prime de la A la B

A treia linie începe iterația

Inițial, programul presupune că numărul i este prim

Apoi, ia pe rând fiecare număr de la 2 la i / 2 și încearcă să-l împartă pe i la acel număr

Dacă i se împarte la vreun număr, înseamnă clar că nu este prim, căci numerele prime se împart doar la 1 și la ele însele.

Deci, dacă i nu se împarte la niciun număr între 2 și i / 2, înseamnă că e  prim.

Acest proces se repetă pentru fiecare număr de la a la b.

Algoritmul acesta este neeficient, totuși. cel eficient ar rula doar de la 2 la sqrt(i). în fine


infooo3553: Multumesc mult!
adresaana: Pentru eficiență, ar rula până la radical din i sau până la parte întreagă din radical din i? :).
RoTakX: Calculul radicalului este costisitor, asa ca se ruleaza cat timp d * d (iteratorul) este mai mic sau egal cu i
RoTakX: adica (cpp) for(d = 2; d * d <= i; d++) ...
adresaana: Aa.. ok, am înțeles. Mulțumesc :)
Alte întrebări interesante