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)
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