iT邦幫忙

2022 iThome 鐵人賽

DAY 12
0
自我挑戰組

Udemy課程上完你也可以開始Codewars 30天系列 第 12

[Day12] Codewars >>> Gap in Primes (Python)

  • 分享至 

  • xImage
  •  

題目(5kyu):

The prime numbers are not regularly spaced. For example from 2 to 3 the gap is 1. From >3 to 5 the gap is 2. From 7 to 11 it is 4. Between 2 and 50 we have the following pairs >of 2-gaps primes: 3-5, 5-7, 11-13, 17-19, 29-31, 41-43

A prime gap of length n is a run of n-1 consecutive composite numbers between two >successive primes (see: http://mathworld.wolfram.com/PrimeGaps.html).

We will write a function gap with parameters:

g (integer >= 2) which indicates the gap we are looking for
m (integer > 2) which gives the start of the search (m inclusive)
n (integer >= m) which gives the end of the search (n inclusive)

In the example above gap(2, 3, 50) will return [3, 5] or (3, 5) or {3, 5} which is the >first pair between 3 and 50 with a 2-gap.

So this function should return the first pair of two prime numbers spaced with a gap of >g between the limits m, n if these numbers exist otherwise `nil or null or None or >Nothing (or ... depending on the language).

gap(2, 5, 7) --> [5, 7] or (5, 7) or {5, 7}
gap(2, 5, 5) --> nil. In C++ {0, 0}. In F# [||]. In Kotlin, Dart and Prolog return []`
gap(4, 130, 200) --> [163, 167] or (163, 167) or {163, 167}
([193, 197] is also such a 4-gap primes between 130 and 200 but it's not the first pair)

解題思路

題目理解:設計一函數給定一個差值g,找到範圍mn之中,第一組符合此差值的兩相鄰質數並返還。

def prime_or_not(number):
    '''檢驗number是否為質數,回傳布林值'''
    for n in range(2,int(number**0.5+1)):
        if number % n == 0: return False
    return True
def gap(g, m, n):
    #預設變數存儲前一個質數的值,預設為最小函數2
    prime_pre = 2
    for i in range(m,n+1):
        if prime_or_not(i):
            #若檢驗到質數,差值與前個質數恰為g則回傳
            if i-prime_pre == g:
                return [prime_pre,i]
            else:
            #若不符合則成為新的當前質數
                prime_pre = i
    return None

其中質數檢驗的函式設計,可以參考 Day 4


上一篇
[Day11] Codewars >>> RGB To Hex Conversion (Python)
下一篇
[Day13] Codewars >>> Scramblies (Python)
系列文
Udemy課程上完你也可以開始Codewars 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言