2325 - prim003: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/2325/prim003 - prim003] ---- == Cerinţa == Anul '''2017''' tocmai s-a încheiat, suntem trişti deoarece era număr prim, însă avem şi o veste bună, anul 2018 este produs de două numere prime, '''2''' şi '''1009'''. Dorel, un adevărat colecţionar de numere prime, şi-a pus întrebarea: “Câte numere dintr-un interval [a,b] se pot scrie ca produs de două numere prime? “. == Date de intrare == Programul citește de la tastatu...
 
No edit summary
Line 25: Line 25:
; Intrare
; Intrare
: 5
: 5
:  
: 1 10
:
: 26 40
:
: 15 90
:
: 90 111
:
: 1431 1530
; Ieșire
; Ieșire
: Datele sunt corecte.
: Datele sunt corecte.
:
: 4 6 25 6 24
===Exemplul 3===
===Exemplul 3===
; Intrare
; Intrare
Line 43: Line 43:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#2325 prim003


def este_prim(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True
   
def conform_restrictiilor(vector,t):
    for i in range(0, t*2,2):
            a = vector[i]
            b = vector[i+1]
            if a <= 0 or b <= 0 or a > 1000000 or b > 1000000 or a > b or t > 100000 or t < 1:
                print("Datele nu sunt conform restricțiilor impuse.")
                return False
    print("Datele sunt corecte.")
    return True
if __name__ == '__main__':
    t = int (input())
    vector = list()
    for _ in range(t):
        a , b = map(int,input().split())
        vector.append(a)
        vector.append(b)
    if conform_restrictiilor(vector,t) is True:
        for i in range(0, t*2,2):
            a = vector[i]
            b = vector[i+1]
            contor = 0
            for numere in range(a, b+1):
                for i in range(2, numere):
                    if este_prim(i) and numere % i == 0 and este_prim(numere // i):
                        contor += 1
                        break
            print(contor,end=' ')





Revision as of 09:08, 24 April 2023

Sursa: - prim003


Cerinţa

Anul 2017 tocmai s-a încheiat, suntem trişti deoarece era număr prim, însă avem şi o veste bună, anul 2018 este produs de două numere prime, 2 şi 1009. Dorel, un adevărat colecţionar de numere prime, şi-a pus întrebarea: “Câte numere dintr-un interval [a,b] se pot scrie ca produs de două numere prime? “.

Date de intrare

Programul citește de la tastatură numărul natural t, iar apoi t perechi de numere naturale a,b cu a≤b, separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi va afișa pe ecran, pentru fiecare pereche a,b, numărul numerelor din intervalul [a,b] care se pot scrie ca produs de două numere prime. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ t ≤ 100.000
  • 1 ≤ a, b ≤ 1.000.000

Exemple

Exemplul 1

Intrare
3
1 7
10 30
88 100
Ieșire
Datele sunt corecte.
2 7 4

Exemplul 2

Intrare
5
1 10
26 40
15 90
90 111
1431 1530
Ieșire
Datele sunt corecte.
4 6 25 6 24

Exemplul 3

Intrare
2
314515341535441 412351541241
29 49
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare

<syntaxhighlight lang="python" line>

  1. 2325 prim003

def este_prim(n):

   if n < 2:
       return False
   for i in range(2, int(n ** 0.5) + 1):
       if n % i == 0:
           return False
   return True


def conform_restrictiilor(vector,t):

   for i in range(0, t*2,2):
           a = vector[i]
           b = vector[i+1]
           if a <= 0 or b <= 0 or a > 1000000 or b > 1000000 or a > b or t > 100000 or t < 1:
               print("Datele nu sunt conform restricțiilor impuse.")
               return False
   print("Datele sunt corecte.")
   return True


if __name__ == '__main__':

   t = int (input())
   vector = list()
   for _ in range(t):
       a , b = map(int,input().split())
       vector.append(a)
       vector.append(b)
   if conform_restrictiilor(vector,t) is True:
       for i in range(0, t*2,2):
           a = vector[i]
           b = vector[i+1]
           contor = 0
           for numere in range(a, b+1):
               for i in range(2, numere):
                   if este_prim(i) and numere % i == 0 and este_prim(numere // i):
                       contor += 1
                       break
           print(contor,end=' ')


</syntaxhighlight>

Explicaţie cod