质数逻辑,循环中的n/2条件
Prime number Logic, n/2 condition in a loop
以下代码用于质数。我想知道为什么我们在循环中使用 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;
}
虽然这是C程序。但是素数逻辑对于 C 和 Java 都是相同的
质数
每个只能被1和它本身整除的自然数都是质数。
还有,2是第一个素数。
例如,我们要测试数字100是不是素数。我们可以做一个试验除法来测试 100 的素数。
我们来看看100的所有约数:
2、4、5、10、20、25、50
这里我们看到最大的因数是100/2 = 50。这对所有n都是成立的:所有约数都小于或等于n/2。
所以这里条件i<=n/2条件是正确的。因为我们只需要测试最多 n/2 的除数。
请查看 Wiki link 了解更多详情
https://en.wikipedia.org/wiki/Primality_test
第二个例子
同样,对于 11,您将检查所有小于 5.5 的整数,即 1、2、3、4 和 5。
任何数 n 的最大因数必须 <= n/2,因此无需检查更大的数
以下代码用于质数。我想知道为什么我们在循环中使用 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;
}
虽然这是C程序。但是素数逻辑对于 C 和 Java 都是相同的
质数
每个只能被1和它本身整除的自然数都是质数。
还有,2是第一个素数。
例如,我们要测试数字100是不是素数。我们可以做一个试验除法来测试 100 的素数。
我们来看看100的所有约数:
2、4、5、10、20、25、50
这里我们看到最大的因数是100/2 = 50。这对所有n都是成立的:所有约数都小于或等于n/2。
所以这里条件i<=n/2条件是正确的。因为我们只需要测试最多 n/2 的除数。
请查看 Wiki link 了解更多详情 https://en.wikipedia.org/wiki/Primality_test
第二个例子
同样,对于 11,您将检查所有小于 5.5 的整数,即 1、2、3、4 和 5。
任何数 n 的最大因数必须 <= n/2,因此无需检查更大的数