老牛来学习 发表于 2020-2-16 11:38:15

S1E15

题目需求:
1、求 m 是否为素数,m 不必被 2 ~ m/2 之间的每一个整数去除,只需被 2 ~之间的每一个整数去除就可以了。如果 m 不能被 2 ~间任一整数整除,那么 m 必定是素数。

#include <stdio.h>
#include <math.h>

int main()
{
      int count = 4; // 已知2,3,5,7是素数
      int i, j, k;
      _Bool flag = 1;

      for (i = 9; i < 10000; i++)
      {
                k = (int)sqrt((double)i);       //这个double放在这有什么用,题目要求被2-根号m的整数去除,代码里面哪里写了把开完根号的数变成整数?

                for (j = 2; j <= k; j++)
                {
                        if (i % j == 0)
                        {
                              flag = 0;
                              break;
                        }
                }

                if (flag)
                {
                        count++;
                }
                else
                {
                        flag = 1;
                }
      }

      printf("10000以内共有%d个素数!\n", count);

      return 0;
}

qiuyouzhi 发表于 2020-2-16 12:03:40

1,在前面那个(int)那里,叫做强制类型转换
2,因为开方后的结果可能是浮点,所以给它改成整数

西凉铁骑 发表于 2020-2-16 12:30:54

里面的double是必须强制转换的,不然会发生错误。sqrt函数里面必须是double.
页: [1]
查看完整版本: S1E15