Python:就區間正整數內所有素數之和

2020-10-12 13:00:26

前言

Python的學習記錄與分享——PTA程式設計類教學平臺。如果你也正在學習關於此類的題目可以仔細閱讀這篇文章,瞭解一下回圈結構、素數的基本語法知識。

題目:

7-5就區間正整數內所有素數之和 (20分)

【描述】求m-n以內所有素數之和並輸出。‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬素數指從大於1,且僅能被1和自己整除的整數。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬提示:可以逐一判斷區間[m,n]之間以內每個數是否為素數,然後求和。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬若m–n之間無素數,則輸出「not have prime!」:
輸入格式:
在一行輸入2個正整數m,n。m可以大於n。例如計算1–100之間(包括100),可以輸入100 1
輸出格式:
若有素數,輸出素數之和的一個整數,若該區間沒有素數則輸出not have prime!。
輸入樣例:

1 100

輸出樣例:

1060

答案

m, n = map(int, input().split())
sum = 0
if m > n:
    m, n = n, m
for i in range(m, n+1):
    if i != 1:
        for j in range(2, i):
            if i % j == 0:
                break
            else:
                pass
        else:
            sum += i
if sum == 0:
    print('not have prime!')
else:
    print(sum)

詳細解析:

首先了解什麼是素數

質數(Prime number),又稱素數,指在大於1的自然數中,除了1和該數自身外,無法被其他自然數整除的數(也可定義為只有1與該數本身兩個因數的數)。

  • 舉個例子:7這個數,從2開始一直到6,都不能被它整除,只有1和它本身(7)才能被整除,所以7就是一個質數。

編寫程式碼

1. 根據題目要求:在一行輸入2個正整數m,n。
m, n = map(int, input().split())

  map()會根據提供的函數對指定序列做對映。它的返回結果是一個列表在

     ----這裡的作用就是將多個輸入值批次轉換成in----
  split()方法指定分隔符對字串進行切片,如果引數num 有指定值則僅分隔 num 個子字串
    ----這裡的作用就是將輸入的一條字串以空格為分隔符切割----

2. 首先學會判斷一個數是不是素數的程式碼
i=7							"用7舉例"
for j in range(2, i): 		"for迴圈讓7除以2-7之間的數"
    if i % j == 0:
		break  				"如果是i除j等於0說明不是素數直接(break)結束迴圈"
	else:
		print("是素數")

         range(start,end,step=)-----range(開始值,結束值,步長)沒寫預設為1

3. 判斷多個數是不是素數

定義一個i,用for迴圈讓i在裡面m-n之間取值

for i in range(m, n+1):
    if i != 1:						「開始的條件必須是i不能等於1for j in range(2, i):
            if i % j == 0:
                break
            else:
                pass
        else:
            sum += i				「如果是就在sum裡面加上這個(i)素數」
4. m、n從小到大排序
	上面的素數判斷都會了後會發現一個問題就是,如果使用者輸入100 1時執行會發生錯誤那麼我們則需要在判斷素數前保證m是小的值,n是大的值。
if m > n:
    m, n = n, m
5. 輸出答案
if sum == 0:						「如果sum在前面的整個for迴圈裡都沒有素數加入」
    print('not have prime!')				「那麼輸出'not have prime!'else:								「否則」
    print(sum)								「輸出答案」
// An highlighted block
var foo = 'bar';

結束

如果你想覺得這篇部落格對你有所幫助,點個贊吧。