61

だから私はインターネットからの少しの助けを借りてこの問題を解決することができました、そしてこれは私が得たものです:

def isPrime(n):
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
        
    return True

しかし、私の質問は本当にそれを行う方法ですが、なぜですか。1は「素数」であるにもかかわらず「素数」とは見なされないことを理解しています。また、範囲内で1で割ると、自動的に素数ではないため、Falseステートメントが返されることを理解しています。しかし、私の質問は、ここで「n」をルート化することはどのような役割を果たしているのかということです。

追伸私は非常に経験が浅く、1か月前にプログラミングを紹介されたばかりです。

4

29 に答える 29

15

質問は少し前に尋ねられましたが、より短い解決策があります

def isNotPrime(Number):
    return 2 not in [Number,2**Number%Number]

数値が素数の場合、ほとんどの場合、数学演算は 2 ではなく 2 を返します。ただし、2 が指定された数値の場合は、調べているリストに追加されます。

例:

2^5=32    32%5=2
2^7=128   128%7=2
2^11=2048 2048%11=2

反例:

2^341%341=2,  but 341==11*31
2^561%561=2,  but 561==3*11*17
2^645%645=2,  but 645==3*5*43

isNotPrime() は、 Number が素数でない場合でも確実に True を返します。

于 2015-10-01T07:52:08.227 に答える
4
def is_prime(x):
    if x < 2:
        return False
    elif x == 2:
        return True  
    for n in range(2, x):
        if x % n ==0:
            return False
    return True
于 2014-08-13T00:08:00.933 に答える
4

数の平方根を見つけるのは効率的です。例えば。36 の因数を見つけようとしている場合、それ自体を掛けて 36 を形成できる最大の数は 6 です。7*7 = 49.

したがって、36 のすべての因数に 6 以下の数を掛ける必要があります。

于 2013-09-28T21:26:33.933 に答える
2
def isPrime(num,div=2):
    if(num==div):
        return True
    elif(num % div == 0):
        return False
    else:
        return isPrime(num,div+1)

=============================================
編集済み

def is_prime(num, div = 2):
    if num == div: return True
    elif num % div == 0: return False
    elif num == 1: return False
    else: return is_prime(num, div + 1)
于 2014-02-20T10:00:16.257 に答える
1
isPrime=lambda x: all(x % i != 0 for i in range(int(x**0.5)+1)[2:])

そして、ここにそれを使用する方法があります

isPrime(2) == False
isPrime(5) == True
isPrime(7) == True

使用できるすべての素数を見つけるには、次のようにします。

filter(isPrime, range(4000)[2:])[:5]
=> [2, 3, 5, 7, 11]

この場合の 5 は、検出される素数の数と、素数が検索される最大範囲 4000 を示していることに注意してください。

于 2015-01-20T17:57:01.073 に答える
-1

ものすごく単純!

def prime(x):
  if x == 1:
    return False
  else:
    for a in range(2,x):
      if x % a == 0:
        return False
  return True
于 2015-05-23T09:23:26.557 に答える
-1
def fun(N):#prime test
if N>1 :
    for _ in xrange(5):
        Num=randint(1,N-1)
        if pow(Num,N-1,N)!=1:
            return False
    return True
return False

数が素数の場合は true、それ以外の場合は false

于 2016-04-10T04:15:33.207 に答える
-1

ここは私のものです

import math

def is_prime(num):

    if num % 2 == 0 and num > 2: 
       return False
    for i in range(3, int(math.sqrt(num)) + 1, 2):
        if num % i == 0:
            return False
    return True
于 2015-11-14T19:26:38.590 に答える
-1

( https://www.youtube.com/watch?v=Vxw1b8f_yts&t=3384s ) アビナッシュ・ジェイン

for i in range(2,5003):
    j = 2
    c = 0
    while j < i:
        if i % j == 0:
            c = 1
            j = j + 1
        else:
            j = j + 1
    if c == 0:
        print(str(i) + ' is a prime number')
    else:
        c = 0
于 2018-01-25T04:37:39.407 に答える
-4

Srsly みんな... なぜこのような単純なメソッドのコードの行数が多いのですか? これが私の解決策です:

def isPrime(a):
    div = a - 1
    res = True
    while(div > 1):
        if a % div == 0:
            res = False
        div = div - 1
    return res
于 2014-11-04T00:20:50.240 に答える