鱼C论坛

 找回密码
 立即注册
查看: 960|回复: 2

[已解决]想问一下友友,_Bool flag的意思

[复制链接]
发表于 2023-3-21 21:27:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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;
}
最佳答案
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 可以直接使用,而不必导入任何库。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 可以直接使用,而不必导入任何库。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-21 21:59:43 | 显示全部楼层
你好厉害呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 14:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表