1 den n ye kadar olan tüm sayıların ekokunu bulma

eğer 1, den 10 kadar olan sayıların ekokunu bulsaydık cevap 2520 olcaktı .
aşağıdaki kod sayı 20 olunca sıkıntı çıkarıyor.İşi kolaylaştırcak bir kod arıyorum

while j :
    sayaç=0
    for i in range(1,11):
        if j % i!=0:
            break
        else:
            sayaç=sayaç+1
    if sayaç==10:
        break
    j=j+1
print(j)

Çıkarır çünkü sonucu bulmak için bir değişkeni birer birer arttırıyorsunuz. Öklid algoritması ile ebob, daha sonra ebob ile de ekok fonksiyonunu oluşturursanız gerisi gelir.

def ebob(x,y):
	while y:
		r=x
		x=y
		y=r%y
	return x

def ekok(x,y):
	return x*y/ebob(x,y)

def eboblar(args):
    f, s, loop = args[0], args[1], args[2:]
    l = ebob(f, s)
    for i in loop:
        l = ebob(l, i)
    return l

def ekoklar(args):
    f, s, loop = args[0], args[1], args[2:]
    l = ekok(f, s)
    for i in loop:
        l = ekok(l, i)
    return l

print(ekoklar([i for i in range(1,10)]))
1 Beğeni

bir tane de ben buldum

def çokluekok(a):
    def asalsayı(a):
        liste=[]
        for  i in range(2,a+1):
            sayı=2
            while sayı<=i**(0.5):
                if i%sayı==0:
                    break
                sayı=sayı+1
            else :
                liste.append(i)
        return liste

    ekle=[]
    for i in asalsayı(a):
        j=0
        while i**j<a:
            j=j+1

        ekle.append(j-1)
    aranan=[x**y for x ,y in zip(asalsayı(a),ekle)]
    istenen=1
    for k in aranan :
        istenen=k*istenen
    print(istenen)
çokluekok(20)

Python3.9’un math modülüne ikiden fazla sayı alabilen ekok ve ebob fonksiyonları geliyormuş bu arada:
https://docs.python.org/3.9/library/math.html#math.gcd
https://docs.python.org/3.9/library/math.html#math.lcm

2 Beğeni

Ben de öz-yineleme kullanarak bir örnek yapayım.

def obeb(*args, x: int = 1):
    for i in range(2, max(args)):
        if all(j % i == 0 for j in args):
            return obeb(*[j // i for j in args], x=x * i)
    return x


def okek(*args, x: int = 1):
    args = [i for i in args if i not in [0, 1]]
    if not args:
        return x
    for i in range(2, max(args) + 1):
        bools = [j % i == 0 for j in args]
        if all(bools):
            return okek(*[j // i for j in args], x=x * i)
        elif any(bools):
            return okek(
                *[
                    j // i if bools[index] else j
                    for index, j in enumerate(args)
                ],
                x=x * i
            )

Örnek:

print(obeb(24, 36, 48))
print(okek(*range(10)))

Çıktı:

12
2520
1 Beğeni