x=eval(input("請輸入小于1000的整數(shù):"))
成都創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設、網(wǎng)站重做改版、奉賢網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、html5、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、成都外貿網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為奉賢等各大城市提供網(wǎng)站開發(fā)制作服務。
k=2
print(x,"=",end="")
while x1:
if x%k==0:
? print(k,end="")
? x=x/k
? if x1:
? ? ? print("*",end="")
else:
? k=k+1
這個其實很簡單,思路是通過列表推導式生成三個2位數(shù)的隨機數(shù),再通過max內建函數(shù)取最大數(shù)
上代碼了
max( [random.randint(10, 99) for i in range(3)])
def?fun(n:?int):
L?=?[?]
for?i?in?range(2,?n?//?2?+?1):
if?not?n?%?i:
L.append(i)
return?L
print(fun(256))
1. 首先解決你的語法問題
i和j是局部變量,只在當前for循環(huán)的語句內有效,所以,你的if j==i這一句就訪問了一個失效的變量j,同樣你的遞歸調用一樣訪問了j,因此我建議你在外層循環(huán)上面加上一句i = j = 2(反正賦初值不要用0就行,因為你的遞歸調用k/j可能造成除0異常)
2. 算法問題
你采用了遞歸求解,k==1作為遞歸退出條件本身是正確的,而作為參數(shù)合法性判斷則顯得有些不足,我建議應該修改為k = 1。
另外,你的算法會存在一個不影響正常功能的小缺陷,那就是可能重復打印質因子,比如算100的質因子,就會重復打印出兩個2和兩個5,因為先算出100的質因子2以后,接著算100/2的質因子,而50同樣存在質因子2,整個過程就變成了
kj(100)
kj(50)
kj(25)
kj(5)
因此結果是
2
2
5
5
關于這一點,你可以忽略不計,或者通過調整代碼自己進行規(guī)避
希望我的回答能夠對你有所幫助
解題思路:需要實現(xiàn)兩個函數(shù),一個是判斷數(shù)字是否是素數(shù);一個是求和函數(shù)。
實現(xiàn)函數(shù),判斷是否是素數(shù),is_prime,具體代碼如下:
def is_prime(num):
"""
判斷是否是素數(shù).
:param num:
:return:
"""
result = True
# 質數(shù)大于 1
if num 1:
? # 查看因子
? for i in range(2, num):
? ? ? if (num % i) == 0:
? ? ? ? ? result = False
? ? ? ? ? break
? else:
? ? ? result = True
# 如果輸入的數(shù)字小于或等于 1,不是質數(shù)
else:
? result = False
return result
實現(xiàn)函數(shù),計算數(shù)字start到end之間的所有素數(shù)之和,sum,具體代碼如下:
def sum(start, end):
"""
求閉區(qū)間[start, end]之間的素數(shù)之和.
:param start:
:param end:
:return:? ? """
result = 0;
for i in range(start, end + 1):
? if is_prime(i):
? ? ? print(i)
? ? ? result = result + i
return result
在main函數(shù)中調用求和,代碼如下:
if __name__ == '__main__':
num = 8
print(is_prime(num))
num = 5
print(is_prime(num))
print(sum(1, 5))
完整 代碼如下:
不考慮效率的話,因數(shù)和就直接用所有小于x的正整數(shù)試商即可,因此,可以寫成: