函数入门请教

本人小白,刚接触python,目前学习到函数章节,以下是我的问题,希望大佬能提点一二:#判断质数
def isit(num):
    isdata = True
    if num==0 or num==1:
        return False
    elif num==2 or num==3:
        return True
    elif num>3:

        for i in range(2,num):
            if num%i==0:
                return False
                break
            else:
                return True

当print(isit(15))时
返回为True我不知道我是哪里出了错,希望得到大佬帮助,感激不尽!


请先 登录 后评论

最佳答案 2021-09-23 23:06


判定數值不大的質數的函數:

  1. def isPrime(num) -> bool:
  2.     for i in range(2, num):
  3.         if num%i == 0: return False
  4.     return False
复制代码

如果想判定超大數值是否為質數時,可以用米勒-拉賓質數判定法:
  1. def isPrime(n, k=5): # 米勒-拉賓質數判定法
  2.     from random import randint
  3.     if n < 2: return False
  4.     for p in [2,3,5,7,11,13,17,19,23,29]:
  5.         if n % p == 0: return n == p
  6.     s, d = 0, n-1
  7.     while d % 2 == 0:
  8.         s, d = s+1, d/2
  9.     for i in range(k):
  10.         x = pow(randint(2, n-1), d, n)
  11.         if x == 1 or x == n-1: continue
  12.         for r in range(1, s):
  13.             x = (x * x) % n
  14.             if x == 1: return False
  15.             if x == n-1: break
  16.         else: return False
  17.     return True
复制代码
请先 登录 后评论

其它 3 个回答

千四儿
你仔细想想,当num为15时,第一次执行for...in...循环,i == 2,num ==15,那么num%i == 1,不符合if的条件num%i == 0,因此执行else,即返回True
请先 登录 后评论
ztruth
当调用isit(15)时,传入的参数是num = 15,前面两个if和elif都不符合条件,所以直接跳过,执行elif num>3:后面的内容,进入for...in循环,第一次循环,i=2,那么num % 2相当于15%2 == 1不符合if 的条件num%i == 0,所以执行else后面的内容,于是返回True
请先 登录 后评论
可小可大
你是不是想看输入的数是不是质数啊,那你该把返回的结果都放入一个列表里,然后再判断
请先 登录 后评论
  • 5 关注
  • 1 收藏,606 浏览
  • 乡下女孑 提出于 2021-09-23 23:06

相似问题