当前位置: 首页 > 知识库问答 >
问题:

codechef不接受打印素数

罗允晨
2023-03-14

我试图从代码厨师那里解决识别素数的问题

爱丽丝和鲍勃过了很长时间才见面。像往常一样,他们喜欢玩一些数学游戏。这一次爱丽丝接了电话,决定了比赛。游戏很简单,爱丽丝说出一个整数,鲍勃必须说出这个数字是否是质数。鲍勃像往常一样知道逻辑,但由于爱丽丝没有给鲍勃太多时间思考,所以鲍勃决定写一个计算机程序。

通过编写一个计算机程序来帮助Bob完成这项任务,该程序将计算该数字是否为素数。

输入

输入的第一行包含一个整数T,即测试用例数。然后是T线。

接下来的每一条T线都包含一个整数N,必须对其进行素性测试。

输出

对于单独一行中的每个测试用例输出,如果数字为素数,则为“是”,否则为“否”

约束条件

1 ≤ T ≤ 20
1 ≤ N ≤ 100000

输入:

5
23
13
20
1000
99991

输出:

yes
yes
no
no
yes

我的代码不被接受,即使我得到了预期的输出,我可以知道哪个测试用例不令人满意吗?

代码:

t=int(input())

for i in range(t):
    x=int(input())
    if x > 0:
        if x%2 == 0 and x % x == 0:
            print('no')
        else:
            print('yes')
    else:
        pass
    

共有3个答案

曾光远
2023-03-14

质数是一个只能被它本身和1整除的数。这意味着,为了检查一个数字x是否是质数,你必须确保它不能被从2到sqrt(x)的任何数字整除。您可以在这里检查该范围背后的数学原因。
这是程序中的主要缺陷,因为您只检查了2和x的条件。
在这个程序中,标志变量初始化为0,这是用作检查数字是否为质数的指标。同时循环,从2迭代到sqrt(x),如果x碰巧可以被任何其他数字整除,则标志被设置为1并中断。
在循环执行后,如果标志值仍然是0,它意味着这个数字是素数,因为循环中没有一个值满足将标志值设置为1的if条件。

import math
x = int(input())
i = 2
flag = 0
while i<math.sqrt(x):
    if x%i == 0:
        flag+=1
        break
    i+=1

if flag == 0 :
    print("Prime")
else:
    print("Not Prime")

慕容坚
2023-03-14

问题是,您只是碰巧得到了这个测试用例的正确输出,而您的算法实际上并没有检查一个数字是否为素数。

你应该考虑:

msgstr"如果一个数大于1,并且除了1和数本身之外没有其他的正除数,那么它就是素数"

您的代码应该看起来像这样才能工作:

def checkPrime(x):
    if x > 1:
        for j in range(2, int(x / 2) + 1):
            if (x % j) == 0:
                print("no")
                return

        print("yes")

    else:
        print("no")

t=int(input())
for i in range(t):
    x=int(input())
    checkPrime(x)

严斌
2023-03-14

那个算法并没有检查这个数是否是素数。

你应该使用一些众所周知的算法。

def is_prime(n: int) -> bool:
    """Primality test using 6k+-1 optimization."""
    if n <= 3:
        return n > 1
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i ** 2 <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True
 类似资料:
  • 这是一个我甚至无法在我们的测试环境中重现的错误——到目前为止,它只发生在生产环境中,需要运行一段时间才能发生(重启一段时间后就可以了)。 在打印PDF文件时,上述异常被抛出,在打印机队列中,我可以看到作业挂在错误状态。让我有点困扰的是,我打印的文件大小约为40 kb,打印队列显示它们约为1.4 MB,但也许这是正常的,我不知道。无论如何,我读了一两件关于这个异常的事情,但是有些事情不太对——应用程

  • 问题内容: 我如何在arraylist“列表”中打印元素“ e”? 问题答案: 您是要打印整个列表还是要遍历列表的每个元素?两种打印您的类有意义的东西的方法都需要重写该类的方法(如其他答案所述)以返回有效结果。 此代码的输出是:

  • 问题内容: Java中有一种简单的方法可以执行以下操作吗? 连接到打印机(将是本地打印机,并且是连接到机器的唯一打印机)。 在2个不同的打印机纸盘中打印2页的页面。 获取当前的打印队列计数,即我有100项要打印的项目和34项当前已打印,则打印机队列现在应显示为66。 问题答案: 一些快速提示: 从Java打印:请参阅基本打印程序 打印作业的状态:您可以使用PrintJobListener获得一些有

  • 在我们的android应用程序中,我们可以成功地将图像打印到P4T打印机。我们使用pcx cpcl命令与其他收据文本内联打印图像。在打印收据之前,我们使用zebra sdk将图像上传到打印机内存。我们让zebra首先将我们的位图转换为ZebraImage,然后上传它。在P4T上,这会产生一个。然后我们在cpcl标签中引用的PCX文件。示例: 打印机配置: 在android应用程序中: cpcl格式

  • 本文向大家介绍打印HTML5画布元素,包括了打印HTML5画布元素的使用技巧和注意事项,需要的朋友参考一下 以下是显示HTML5 canvas元素的代码段。 canvas_voucher是canvas元素的ID。要使此功能正常运行,我们需要将canvas转换为.png图片网址,然后在新的浏览器窗口中将其打开。触发“打印”对话框,使用户可以打印页面。

  • 家庭作业:寻找更好的策略或方法,而不是完整的代码。 当我试图确定这个问题的递归情况时,我完全被弄糊涂了。我必须编写一个接受整数参数“n”的方法,然后输出总共“n”个字符。根据原始整数是奇数还是偶数,中间字符应始终为“”或“*”。下面是两个不同的方法调用和输出应该是什么样子: 我该如何识别递归案例呢?