布尔值为';t在C编程语言中正常工作
我试着做一个素数发生器,但我不知道为什么它不工作。因为根据代码,它应该可以正常工作。我在函数中的某个地方使用了if语句,我认为每次它应该得到一个真值时,它都会得到一个假值。它应该给我所有的素数,直到用户提供值,但它什么也没有给我布尔值为';t在C编程语言中正常工作,c,loops,for-loop,primes,function-definition,C,Loops,For Loop,Primes,Function Definition,我试着做一个素数发生器,但我不知道为什么它不工作。因为根据代码,它应该可以正常工作。我在函数中的某个地方使用了if语句,我认为每次它应该得到一个真值时,它都会得到一个假值。它应该给我所有的素数,直到用户提供值,但它什么也没有给我 #include <stdio.h> #include <math.h> #include <stdbool.h> bool isPrime(int num) { int sqroot = (int)sqrt((double)
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool isPrime(int num) {
int sqroot = (int)sqrt((double)num);
for (int i = 1; i <= sqroot; i++){
if (num%i == 0){
return false;
}
}
return true;
}
void gen(int num){
int counter = 0;
for (int i = 2; i <= num; i++){
if (isPrime(i)){
counter++;
printf("%d : %d\n", counter, i);
}
}
}
int main(void)
{
int x;
scanf("%d", &x);
gen(x);
return 0;
}
#包括
#包括
#包括
bool isPrime(整数){
intsqroot=(int)sqrt((double)num);
for(int i=1;ifor循环从i=1开始,因此测试(num%i==0)
在第一次迭代时总是计算为true
。只需从i=2
开始,您的函数isPrime
是错误的。每个数字都可以被1
整除。因此函数总是返回false
此外,函数参数应具有无符号整数类型,而不是有符号整数类型int
。最好将其声明为具有类型无符号long
您可以像这样声明函数
bool isPrime( unsigned long long n );
该函数可以通过以下方式定义
bool isPrime( unsigned long long n )
{
bool prime = n % 2 == 0 ? n == 2 : n != 1;
for ( unsigned long long i = 3; prime && i <= n / i; i += 2 )
{
prime = n % i != 0;
}
return prime;
}
#include <stdio.h>
#include <stdbool.h>
bool isPrime( unsigned long long n )
{
bool prime = n % 2 == 0 ? n == 2 : n != 1;
for ( unsigned long long i = 3; prime && i <= n / i; i += 2 )
{
prime = n % i != 0;
}
return prime;
}
void gen( unsigned long long n )
{
size_t count = 0;
for ( unsigned long long i = 1; i < n; i++ )
{
if ( isPrime( i + 1 ) )
{
printf( "%zu : %llu\n", ++count, i + 1 );
}
}
}
int main(void)
{
while ( true )
{
printf( "Enter a non-negative number (0 - exit): " );
unsigned long long n;
if ( scanf( "%llu", &n ) != 1 || n == 0 ) break;
gen( n );
putchar( '\n' );
}
return 0;
}
你怎么知道它不工作?如果是isPrime
函数不工作,你不需要包含gen
函数。请修复一个@klutt:isPrime被gen函数调用,代码已经足够小了。mod 1是什么数字?解决方案已经隐藏在注释中,一般的建议是删除bug是好的。特别是,如果你在调试器下运行你的程序,并以一个足够小的值(比如3)单步执行,它不会花很长时间去看哪里出错。
Enter a non-negative number (0 - exit): 2
1 : 2
Enter a non-negative number (0 - exit): 100
1 : 2
2 : 3
3 : 5
4 : 7
5 : 11
6 : 13
7 : 17
8 : 19
9 : 23
10 : 29
11 : 31
12 : 37
13 : 41
14 : 43
15 : 47
16 : 53
17 : 59
18 : 61
19 : 67
20 : 71
21 : 73
22 : 79
23 : 83
24 : 89
25 : 97
Enter a non-negative number (0 - exit): 0