鱼C论坛

 找回密码
 立即注册
查看: 1629|回复: 3

while 循环,素数

[复制链接]
发表于 2023-8-10 12:52:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求大佬解答这一道题,我实在做不出来了

我的代码错了:
n = 2
while n < q7_input:
    output7_i = bool(True)
    if q7_input%n == 0:
        output7_i = bool(q7_input%n != 0)
        break
    n += 1
print(output7_i)

m = 2
output7_ii = '2 3 5 7 11 '
while m < q7_limit:
      m += 1
      if m%2 != 0 and m%3 != 0 and m%5!= 0 and m%7 !=0 and m%11 != 0:
            output7_ii += f'{m} '
output7_ii = output7_ii.strip()
print(output7_ii)
截屏2023-08-10 下午2.19.35.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-10 12:53:03 | 显示全部楼层
根据您提供的代码,我发现了一些错误和改进的地方。以下是修正后的代码,用于找出小于输入值 q7_input 的素数,并生成一个字符串 output7_ii 包含这些素数:
q7_input = int(input("请输入一个正整数: "))  # 输入值
output7_i = True  # 判断输入值是否为素数

n = 2
while n < q7_input:
    if q7_input % n == 0:
        output7_i = False
        break
    n += 1

print(output7_i)

q7_limit = int(input("请输入一个正整数: "))  # 上限值
output7_ii = '2 3 5 7 11 '  # 包含素数的字符串

m = 12
while m < q7_limit:
    is_prime = True
    for i in range(2, int(m ** 0.5) + 1):
        if m % i == 0:
            is_prime = False
            break
    if is_prime:
        output7_ii += f'{m} '
    m += 1

output7_ii = output7_ii.strip()
print(output7_ii)

对于第一个循环,我们判断 q7_input 是否为素数时,需要考虑使用 output7_i 作为布尔类型的变量来记录判断结果,并在循环结束后打印。

对于第二个循环,我们用 m 从 12 开始遍历到 q7_limit,并逐个判断当前的 m 是否为素数。在判断素数时,我们可以使用一个内部循环和取余运算符来找出是否存在某个数能整除 m,如果存在,则将 is_prime 设为假(False)。当内部循环结束后,我们检查 is_prime 的值,如果为真(True),则将当前的 m 添加到 output7_ii 字符串中。

这样,修正后的代码应该能够正确地找出小于输入值 q7_input 的素数,并生成相应的字符串 output7_ii。希望这可以帮到你!如果还有其他问题,请随时追问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-10 12:53:14 | 显示全部楼层
问题分析:

这段代码是用来判断一个数是否为素数,并输出一定范围内的素数。但是代码中存在一些问题,导致结果不正确。

问题解答:

首先,我们来看第一个问题,判断一个数是否为素数。代码中使用了一个  while  循环,从 2 开始逐个判断是否能整除  q7_input ,如果能整除,则  output7_i  被赋值为  False ,并且跳出循环。如果不能整除,则  output7_i  保持为  True ,并且继续循环。最后输出  output7_i 。

问题出在  output7_i  的赋值上。在循环中,每次都将  output7_i  赋值为  True ,这是正确的。但是在判断  q7_input  能否整除  n  的时候,赋值语句  output7_i = bool(q7_input%n != 0)  是错误的。这个赋值语句的目的是将  output7_i  赋值为  False ,但是由于  bool(q7_input%n != 0)  的结果已经是布尔类型,不需要再使用  bool()  函数进行转换。正确的赋值语句应该是  output7_i = q7_input%n != 0 。

修改后的代码如下:
n = 2
output7_i = True
while n < q7_input:
    if q7_input % n == 0:
        output7_i = False
        break
    n += 1
print(output7_i)

接下来,我们来看第二个问题,输出一定范围内的素数。代码中使用了一个  while  循环,从 2 开始逐个判断是否为素数,并将素数拼接到  output7_ii  字符串中。最后输出  output7_ii 。

问题出在判断是否为素数的逻辑上。代码中使用了一连串的  and  运算符来判断一个数是否能被 2、3、5、7、11 整除。但是这种判断方式是不正确的。正确的判断方式是使用一个嵌套的循环,依次判断一个数是否能被小于它的数整除。如果能整除,则不是素数,跳出循环;如果不能整除,则是素数,将其拼接到  output7_ii  字符串中。

修改后的代码如下:
m = 2
output7_ii = '2 3 5 7 11 '
while m < q7_limit:
    is_prime = True
    for i in range(2, m):
        if m % i == 0:
            is_prime = False
            break
    if is_prime:
        output7_ii += f'{m} '
    m += 1
output7_ii = output7_ii.strip()
print(output7_ii)

以上是对代码中问题的解答和修改。希望能帮助到你。如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-12 12:05:12 | 显示全部楼层
# 问题1 (要求使用一个while实现)
q7_input = 19 # 输入
n = 2
output7_i = True # 先假设为素数
while n < q7_input//2+1: # 不能被1和它之间的一半的整数整除,就能判断他是素数了,所以范围设为q7_input//2+1
    if q7_input%n == 0:
        output7_i = False
        break
    n += 1
print(output7_i)


# 问题2 (要求是用一个或多个while实现)
q7_limit = 50 # 输入
num = 2
output7_ii = []
while num <= q7_limit: # 逐个判断50内的所有整数 是不是素数

    # 判断num是不是素数
    is_prime = True
    n = 2
    while n < num//2+1: 
        if num%n == 0:
            is_prime = False
            break
        n += 1
    if is_prime:
        output7_ii.append(num)
        
    num += 1

print(output7_ii)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 07:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表