【问题标题】:Prime number Logic, n/2 condition in a loop质数逻辑,循环中的 n/2 条件
【发布时间】:2017-10-26 16:37:55
【问题描述】:

以下代码用于质数。我想知道为什么我们在循环中使用i<=n/2 条件。

C 程序:

#include <stdio.h>
int main()
{
int n, i, flag = 0;

printf("Enter a positive integer: ");
scanf("%d",&n);

for(i=2; i<=n/2; ++i)
{
    // condition for nonprime number
    if(n%i==0)
    {
        flag=1;
        break;
    }
}

if (flag==0)
    printf("%d is a prime number.",n);
else
    printf("%d is not a prime number.",n);

return 0;
}

【问题讨论】:

  • 这甚至不是java。
  • 另外,它更多的是关于逆向工程发现的一些代码 OP,而不是关于实际问题的解决:D
  • 第二个循环是什么?只有一个循环。
  • 公平地说,the site where this code is copied from 并没有很好地解释它。
  • 我不知道为什么代码使用n/2,特别是因为你只需要检查一个数的平方根的因数来确定素数。

标签: c primes primality-test


【解决方案1】:

虽然这是 C 程序。但素数逻辑对于 C 和 Java 都是相同的

质数
每个只能被 1 整除的自然数和它本身都是素数。 另外,2 是第一个素数。

例如,我们要测试数字 100 是否为质数。我们可以做一个试除法来测试100的素数。

让我们看看 100 的所有除数:

2、4、5、10、20、25、50

这里我们看到最大因子是 100/2 = 50。这对所有 n 都是正确的:所有除数都小于或等于 n/2。

所以这里的条件 i

请查看 Wiki 链接了解更多详情 https://en.wikipedia.org/wiki/Primality_test

第二个例子

同样,对于 11,您将检查所有小于 5.5 的整数,即 1、2、3、4 和 5。

To find a number is prime, Why checking till n/2 is better. What is the reason for avoiding numbres in second half of n

【讨论】:

【解决方案2】:

任何数字 n 的最大因数必须是

【讨论】:

  • See this。从技术上讲,你没有错,但你并没有尽可能地正确。
  • @WaiHaLee 我看到了,这是关于以更有效的方式获得循环限制以检查素数的另一种方法,但它与这个特定问题无关,问题是关于澄清n/2 不是获得素数的最佳方法:)
猜你喜欢
  • 2018-11-02
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2015-02-12
  • 2022-11-14
  • 2018-01-30
  • 1970-01-01
相关资源
最近更新 更多