啊这啧啧啧 发表于 2023-3-21 21:27:51

想问一下友友,_Bool flag的意思

2. 编写一个程序,求解 600851475143 的最大质数因子是多少?
#include <stdio.h>
#include <math.h>

int main()
{
      long long i, j, k, l, num = 600851475143;
      _Bool flag = 1;

      for (i = 2, j = num/i; flag != 0; i++, j = num/i, flag = 1)//我用的app一直编译不出来,所以一直不理解他的用途
      {
                if (i * j == num)
                {
                        k = sqrt((double)j);
                        for (l = 2; l <= k; l++)
                        {
                              if (j % l == 0)
                              {
                                        flag = 0;
                                        break;
                              }
                        }
                        if (flag)
                        {
                              break;
                        }
                }
      }

      printf("%lld\n", i);

      return 0;
}

isdkz 发表于 2023-3-21 21:32:41

1、_Bool flag 是一个布尔类型的变量,只有两种可能的值:0和1,或者说false和true。在这个程序中,flag 的作用是判断是否找到了最大的质数因子。初始值为 1,表示还没有找到最大质数因子,当找到最大质数因子时,将其值改为 0。

2、这个程序用了试除法来找到最大的质数因子。首先,将变量 i 初始化为 2,每次循环 i 加 1,直到找到最大的质数因子为止。在循环中,计算 j 的值,即 j=num/i,判断 i 和 j 的乘积是否等于 num,如果等于,则说明找到了一个因子。然后再用 k=sqrt((double)j) 计算 j 的平方根,从 2 开始枚举到 k,判断是否存在一个小于等于 k 的质数可以整除 j。如果存在这样的质数,就将 flag 的值改为 0,并退出内层循环。如果内层循环执行完后 flag 的值仍然为 1,说明 j 是一个质数,也就是找到了最大的质数因子,此时将 i 的值输出即可。

你编译不出来的可能原因如下:
_Bool 是 C99 标准中新增的布尔类型,不需要导入任何库就可以使用。在 C99 标准之前,C 语言并没有原生的布尔类型,一般使用整型变量来表示布尔值,例如 0 表示 false,非 0 表示 true。但是在 C99 标准中,引入了新的布尔类型 _Bool,它只有两个值:0 表示 false,1 表示 true。在使用 _Bool 类型时,可以在程序开头加上 #include <stdbool.h> 头文件,这个头文件定义了一个宏 bool 和一个常量 true 和 false,可以更方便地使用布尔类型。但是,这不是必须的,_Bool 可以直接使用,而不必导入任何库。

啊这啧啧啧 发表于 2023-3-21 21:59:43

你好厉害呀{:10_298:}
页: [1]
查看完整版本: 想问一下友友,_Bool flag的意思