以下代码用于素数。我想知道为什么我们在循环中使用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;
}
答案 0 :(得分:3)
虽然这是C程序。但是对于C和Java来说,素数逻辑都是相同的
素数
每个可被1整除的自然数本身就是素数。
另外,2是第一个素数。
例如,我们想测试数字100是否为素数。我们可以做一个试验分裂来测试100的素数。
让我们看看100的所有除数:
2,4,5,10,20,25,50
这里我们看到最大因子是100/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。
答案 1 :(得分:-1)
任何数字n的最大因子必须为<= n / 2,因此无需检查较大的数字