在python中检查素数

时间:2019-06-12 08:54:41

标签: python python-3.x

我写了这个程序来检查天气。是否为质数,但它显示数字为质数倍。我该怎么解决

要检查天气数字是否是素数。

num = int(input("please enter the number you want to check\n"))

if num > 1:
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            break
        else:
            print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')

6 个答案:

答案 0 :(得分:1)

您的问题是for循环的else部分是错误的。每次除法检查失败时,您都打印"the number is prime",而不仅仅是在结束时打印。

我添加了一个isPrime布尔值,用于跟踪单项检查是否失败。仅当其中没有一个失败时,您才能打印该数字为素数。

num = int(input("please enter the number you want to check\n"))

if num > 1:
    isPrime = True
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            isPrime = False
            break
    if isPrime:
        print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')

您可以使用名为for-else的python结构(归功于@TheGamer007)来进一步简化该操作:

num = int(input("please enter the number you want to check\n"))

if num > 1:
    for i in range(2, num):
        if (num % i) == 0:
            print("the number is not prime")
            print(str(i) + " times " + str(num//i) + " is "+ str(num))
            break
    else:
        print("the number is prime")
elif(num == 1):
    print("the number is not prime")
else:
    print('enter a positive value')

它之所以有效,是因为Python的for循环可以跟随else:,只有在您不要 break退出循环时才会触发。 / p>

这可能正是您要尝试执行的操作。在那种情况下,您做错的只是缩进。

而且,从算法的角度来看,还有很多更好的检查方法。第一个简单的改进就是您不需要检查range(2,num),而只需检查range(2, int(math.sqrt(num))+1)

答案 1 :(得分:1)

这是我的代码,用于检查数字是否为质数,希望对您有所帮助

# Program to Check whether given number is prime

def isPrime(number):
    limit = int(number/2) # limit indicates how many times we need to run the loop
    flag=0                # to keep track whether the number is prime or not
    if number==0 or number==1:
        print(f"The Given Number {number} is Not Prime")
        return
    for i in range(2,limit+1):
        if number%i==0:
            flag=1
            break
    if flag==0:
        print(f"The Given Number {number} is Prime")
    else:
        print(f"The Given Number {number} is Not Prime")

isPrime(1)

答案 2 :(得分:0)

使用变量,例如标志,并将其初始化为0。如果数字不是素数,即i%2 == 0,则将标志设置为1并中断,否则标志= 0。

之后,从for块中出来,并在if条件显示的帮助下,数字是否为质数。也就是说,如果flag == 0,则数字是质数,否则不是。

答案 3 :(得分:0)

要确定一个数字是否为质数,您需要做的就是找到1个大于或等于2的数字以除以该数字。

在循环中,对于每个不除给定数字的数字,打印出一条消息,指出“数字是素数”

例如,如果要检查数字9是否为质数,则将所有数字从2循环到8,并检查它们是否可以除以9。因此在for循环中,例如数字5-> 9%5!= 0->出现“数字为素数”消息,这是错误的。

下面的代码显示了当数字不是素数时,如何使用布尔值升起一个标志。

num = int(input("please enter the number you want to check\n"))
isPrime = True
while num < 1:
    int(input("enter a positive value\n"))
if num == 1:
    print("the number is not prime")
    return
for i in range(2, num):
    if (num % i) == 0:
       isPrime = False
       break
print(str(num) + " is prime? " + str(isPrime))

答案 4 :(得分:0)

我建议以下实施方式

我们只需要检查/循环计算数字的平方根,而不是数字本身,因此速度更快。

for-else结构使您摆脱了原本需要的function getaddress($lat, $lng) { $url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' . trim($lat) . ',' . trim($lng) . '&sensor=false'; $json = @file_get_contents($url); $data = json_decode($json); $status = $data->status; if ($status == "OK") return $data->results[0]->formatted_address; else return false; } 标志。这种工作方式是,如果循环正常结束而不中断(表示您尚未找到所需内容),它将进入isPrime

else

答案 5 :(得分:0)

一种方法:

def is_prime(n):
    count = 0
    if x > 1:
        for i in range(1, n + 1):
             if x % i == 0:
                  count += 1
    return count == 2



number = int(input("Insert a number: "))
   if is_prime(number):
      print(str(number) + " is a prime number")
   else:
      print(str(number) + " is not a prime number!")

is_prime(7) # >> 返回真

工作原理:

质数 (n) 必须满足以下规则:

  1. n > 1;
  2. n 只能整除 1 和它本身( n % 1 == 0, n % n == 0)

从 1 到 n 迭代执行取模运算。增加变量 count 每次结果都是 0。如果输入满足上面的第二个条件,那么 count 应该等于 2。如果 count 等于 2,那么这个数字就是素数。

例如:

is_prime(7): 7 % 1 = 0 (count += 1), 7 % 2 = 1, 7 % 3 = 1, 7 % 4 = 3, 7 % 5 = 2, 7 % 6 = 1, 7 % 7 = 0(计数 += 1); >> 7 是质数