Problemi 015

Kërkesa

Gjeni nëse një numër i dhënë është i thjeshtë ose jo (pra nuk ka plotpjesëtues të tjerë përveç 1-shit dhe vetes).

Referenca: https://www.codechef.com/problems/PRB01

Shembull

$ cat input.txt
5
23
13
20
1000
99991

$ python3 prog.py < input.txt
yes
yes
no
no
yes

Zgjidhja 1

T = int(input())
for t in range(T):
    N = int(input())
    i = 2
    while i < N:
        if N % i == 0:
            print("no")
            break
        i += 1
    if i == N:
        print("yes")

Sqarime

Kontrollojmë me radhë numrat nga 2N-1, dhe nëse gjendet ndonjë që e plotpjesëton (mbetja e pjesëtimit është 0), printojmë “no” dhe ndërpresim ciklin (me break). Nëse kemi shkuar deri në fund të kontrollit pa e ndërprerë ciklin, i bie që është numër i thjeshtë, kështu që printojmë “yes”.

Zgjidhja 2

T = int(input())
for t in range(T):
    N = int(input())
    for i in range(2, N):
        if N % i == 0:
            print("no")
            break
    else:
        print("yes")

Sqarime

E njëjta llogjikë si më sipër, por e realizuar me një cikël for (në vend të while). Vini re që else-i i for-it zbatohet vetëm kur cikli shkon deri në fund (pa u ndërprerë nga break).

Zgjidhja 3

T = int(input())
for t in range(T):
    N = int(input())
    i = 2
    while i*i < N:
        if N % i == 0:
            print("no")
            break
        i += 1
    if i*i >= N:
        print("yes")

Sqarime

Mjafton që të kontrollojmë numrat nga 2 deri te rrënja katrore e N.

Zgjidhja 4

def is_prime(n):
    i = 2
    while i*i < n:
        if n % i == 0:
            return "no"
        i += 1
    return "yes"

for _ in range(int(input())):
    print(is_prime(int(input())))

Sqarime

Përdorimi i një funksioni në këtë rast e thjeshton llogjikën e programit.

Detyra

Bëni një program që gjen rrënjën katrore natyrore (të përafërt) të një numri natyror të dhënë.

Referenca: https://www.codechef.com/problems/FSQRT

Shembull

$ cat input.txt
3
10
5
10000

$ python3 prog.py < input.txt
3
2
100