【C语言】查找 2 到 100 中的质数

#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int i, j;
   
   for(i=2; i<100; i++) //从2找到100
    {
      for(j=2; j <= (i/j); j++) 
        /* 对每一个具体的数i,从2开始,直到根号i */
        if(!(i%j)) break; // 如果i对j取模的值为0,即i能够整除j,跳出内层的循环,这个i不是质数
      if(j > (i/j)) printf("%d 是质数\n", i); //否则这个i是质数
    }
 
   return 0;
}

一开始没明白,j<=(i/j)这个写法,心想为什么不直接用求平方根的函数呢?改写如下。但其实直接运行会报错,因为使用求平方根函数sqrt()是要包含math.h这个头文件。

#include <stdio.h>
#include <math.h>
 
int main ()
{
   /* 局部变量定义 */
   int i, j;
   
   for(i=2; i<100; i++) {
      for(j=2; j <= sqrt(i); j++)
        if(!(i%j)) break; // 如果找到,则不是质数
      if(j > sqrt(i)) printf("%d 是质数\n", i);
   }
 
   return 0;
}

即使是这样,网页版的c在线工具仍然会报错,不过在本地是可以正常运行的。所以j<=(i/j)其实是一个很巧妙的写法,虽然不符合人的直观思维,但是方便机器运行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值