素数逻辑,循环中的n / 2条件

时间:2017-10-26 16:37:55

标签: c primes primality-test

以下代码用于素数。我想知道为什么我们在循环中使用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;
}

2 个答案:

答案 0 :(得分:3)

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

素数
每个可被1整除的自然数本身就是素数。 另外,2是第一个素数。

例如,我们想测试数字100是否为素数。我们可以做一个试验分裂来测试100的素数。

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

2,4,5,10,20,25,50

这里我们看到最大因子是1​​00/2 = 50.对于所有n都是如此:所有除数小于或等于n / 2。

所以这里条件i&lt; = n / 2条件是正确的。因为我们只需要测试除数为n / 2的除数。

请查看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

答案 1 :(得分:-1)

任何数字n的最大因子必须为<= n / 2,因此无需检查较大的数字