在此循环中
for(loop_counter ; loop_counter < number ; loop_counter++){
使用了一个未声明的变量loop_counter
。如果它是全局变量,则不应在函数中使用它,因为至少不清楚它的值是什么。
此外,在循环中,number%loop_counter != 0
也将中断其迭代。但这并不意味着该数字是素数。
如果用户将传递负数或零,则该函数将具有未定义的行为。
可以通过以下方式定义功能
int is_prime( unsigned int n )
{
int prime = n % 2 == 0 ? n == 2 : n != 1;
for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
{
prime = n % i != 0;
}
return prime;
}
该函数首先排除除2
之外的所有偶数,因为偶数不是质数。并且它还排除了数字1
,因为数字1
不是定义的素数。
int prime = n % 2 == 0 ? n == 2 : n != 1;
因此在循环中,没有必要考虑偶数除数。
for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
^^^^^^
然后在循环内检查给定的奇数n
是否可被奇数除数
prime = n % i != 0;
如果n % i
等于0,则变量prime获得值0,并且由于循环中的条件,循环停止其迭代。
for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
^^^^^
也可以像
那样重写
for ( unsigned int i = 3; prime != 0 && i <= n / i; i += 2 )
^^^^^^^^^^
,
关于:
for(loop_counter ; loop_counter < number ; loop_counter++){
变量loop_counter
尚未初始化(甚至没有声明)
也许你是说:
for( int loop_counter = 0; loop_counter < number ; loop_counter++){
以下建议的代码:
- 干净地编译
- 执行所需的功能
- 不是检查数字是否为质数的最快/最佳方法。而是一种蛮力方法
OPs发布的代码存在一些问题,如对OPs问题的注释中所述,因此在此不再赘述。
现在,建议的代码:
int is_prime(int number)
{
for( int loop_counter = 2 ; loop_counter < number ; loop_counter++)
{
if(number%loop_counter == 0)
{
return 0;
}
}
return 1;
}
本文链接:https://www.f2er.com/3150903.html