#40783: 請大神看下


zjapainz@gmail.com (陳宇灝)

學校 : 不指定學校
編號 : 179329
來源 : [1.168.112.215]
最後登入時間 :
2024-10-11 21:05:31
e539. 00967 - Circular -- UVA | From: [202.151.63.229] | 發表日期 : 2024-06-13 05:33

while(True):
    anscounter = 0
    try:
        i,j = input().split()
    except ValueError:  
        break
    for all_ in range (int(i)+1,int(j),1):
        temporary = all_
        pcounter = 0
        for j in range (len(str(all_))):
            counter = 0
            for k in range (1,int(temporary)+1,1):
                if int(temporary) % k == 0:
                    counter += 1
            if counter == 2:
                pcounter += 1
            temporary = str(temporary)[1::]+str(temporary)[:1:]
        if pcounter == len(str(all_)):
            anscounter += 1
    if anscounter == 1:
        print(f'{anscounter} Circular Prime.')
    elif anscounter > 1:    
        print(f'{anscounter} Circular Primes.')
    else:
        print('No Circular Primes.')                


程式碼對了 但是超時了TLE chatGPT優化了兩三次還是無法T_T   有大神能指點嗎?
 
#40784: Re: 請大神看下


zjapainz@gmail.com (陳宇灝)

學校 : 不指定學校
編號 : 179329
來源 : [1.168.112.215]
最後登入時間 :
2024-10-11 21:05:31
e539. 00967 - Circular -- UVA | From: [202.151.63.229] | 發表日期 : 2024-06-13 05:43

all_ 迴圈是跑i~j之間的值
j迴圈是跑all_長度次數 (因為要右移的次數可能是百位可能是千位)
k迴圈是跑1~現在要檢查的數  (就是看是不是質數)
如果是質數 (counter == 2) 那麼 pcounter + 1
然後右移在檢查一次
直到全部右移完後 檢查 pcounter 是否等於 目前在檢查的數字的長度 (因為3位數的循環質數需要右移三次都是質數 4位就需要右移四位都是質數)
確定這個數字是循環質數後
all_就會+1跑下個數字

(P.S 因為不能影響到all_所以運算過程都放進 temporary 裡面運算)

 
#40785: Re: 請大神看下


zjapainz@gmail.com (陳宇灝)

學校 : 不指定學校
編號 : 179329
來源 : [1.168.112.215]
最後登入時間 :
2024-10-11 21:05:31
e539. 00967 - Circular -- UVA | From: [202.151.63.229] | 發表日期 : 2024-06-13 05:45

確定這個數字是循環質數後
anscounter會先+1 然後
all_就會+1跑下個數字

最後all_都跑完之後才會看有幾個anscounter   (anscounter 就等於是循環質數)

 
ZeroJudge Forum