#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)其实是一个很巧妙的写法,虽然不符合人的直观思维,但是方便机器运行。