سؤال

هذا الرمز يعمل بشكل جيد.ويقول لعام 1980 أنه يعطي النتيجة 2 ^ 2 *3 ^ 2 *5 ^ 1 *7 ^ 0 *11 ^ 1 *(تبقى علامة النجمة الإضافية في النهاية.أستطيع إزالته.وهذا لا علاقة له بمشكلتي.الكود هو:

prime=[2,3,5]
f=7
def next_prime(f):
    j=0
    while j==0:
        for x in prime:
            if f%x==0:
                f+=2
                break
        else:
            j=1
    return f;
def factorization(n):
    list=[2,3,5]
    power=[]
    x=0
    while x<len(list):
        j=0
        while n%list[x]==0:
            j+=1
            n=n/list[x]
        power.append(j)
        x+=1
    if n!=1:
        while n!=1:
            g=next_prime(f)
            j=0
            while n%g==0:
                j+=1
                n=n/g
            else:
                power.append(j)
                prime.append(g)
    x=0
    while x<len(power):
        print(prime[x],"^",power[x],"*",end="")
        x+=1

factorization(1980)

ثم إذا كنت أريد إزالة هذا المصطلح 7 ^ 0 من النتيجة إذن جميع الأعداد الأولية التي لها القوة صفر، قمت بإجراء تغيير في السطر 31 (إذا ي!=0: بدلاً من آخر:).ومن ثم الكود لا يعملإنها تعمل مع أرقام مثل 13860 حيث لا يوجد عدد أولي له القوة صفر ليس في أرقام مثل 1980.لا أستطيع العثور على المشكلة!الكود الذي تم تغييره هو:

prime=[2,3,5]
f=7
def next_prime(f):
    j=0
    while j==0:
        for x in prime:
            if f%x==0:
                f+=2
                break
        else:
            j=1
    return f;
def factorization(n):
    list=[2,3,5]
    power=[]
    x=0
    while x<len(list):
        j=0
        while n%list[x]==0:
            j+=1
            n=n/list[x]
        power.append(j)
        x+=1
    if n!=1:
        while n!=1:
            g=next_prime(f)
            j=0
            while n%g==0:
                j+=1
                n=n/g
            if j!=0:
                power.append(j)
                prime.append(g)
    x=0
    while x<len(power):
        print(prime[x],"^",power[x],"*",end="")
        x+=1

factorization(1980)
هل كانت مفيدة؟

المحلول

لم أقم بتحليل المنطق الخاص بك، ولكنك تستخدم else جملة خطأ. while .. else من المنطقي فقط إذا اتصلت بـ break داخل الخاص بك while.في نموذج التعليمات البرمجية الأول الخاص بك، else يتم تنفيذ الفرع دائمًا.

على سبيل المثال، حتى التعليمات البرمجية التالية سيتم تشغيلها else فرع:

while False:
    print 'while'
else:
    print 'else'

نصائح أخرى

إذا كنت مهتمًا فقط بالحصول على العوامل الأولية لعدد ما، يمكنك تجربة ما يلي:

def primefactors(x):
    factorlist=[]
    loop=2
    while loop<=x:
        if x%loop==0:
            x/=loop
            factorlist.append(loop)
        else:
            loop+=1
    return factorlist

على سبيل المثال:

primefactors(1980)
[2, 2, 3, 3, 5, 11]
primefactors(13860)
[2, 2, 3, 3, 5, 7, 11]

للإضافة إلى إجابة IMSC ، هناك بالفعل خوارزمية تستخدم الحلقة = 6 و Loop += 6 ثم تحاول الحلقة +1 و Loop-1 التي تعمل بشكل أفضل قليلاً.يجب تجربة 2 و 3 يدويًا أولاً.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top