|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
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 可以直接使用,而不必导入任何库。
|
|