silver-crow 发表于 2021-12-23 21:16:57

求解释代码

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)
      {
                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;
}
请问这里为什么 j 有因数了 i 就是最大质数因子了?

jhq999 发表于 2021-12-24 10:06:39

本帖最后由 jhq999 于 2021-12-24 10:18 编辑

2×50=100,i=2;j=50
2×2×25=100 k=50^0.5 i=2 j=25 flag=0
2×2×5×5=100 k=5,j=5 flag=0
j=52到4都不能整除 所以flag一直保持为1
5是100最大质因数
页: [1]
查看完整版本: 求解释代码