为什么看一个数是否是质数写程序时要用看它是否能被小于等于它的根号整除啊?

来源:百度知道 编辑:UC知道 时间:2024/09/27 21:30:03
int prime(int i)
{
int j,k,flag;
flag = 1;
k = sqrt(i);
for (j = 2; j <= k; j++)
{
if(i%j == 0)
{
flag = 0;
break;
}
}
if (flag)
return 1;
else
return 0;
}

设m=a*b;
a和b无外乎a>b,a<b,a=b三种情况,a=b时必然a=b=sqrt(m);a>b时,a>sqrt(m)&&b<sqrt(m);a<b时,a<sqrt(m)&&b>sqrt(m);你可以想象一个数轴,原点是sqrt(m),你判断了左边就可以了,因为右边是对称的,乘法是满足交换律的。m=a*b与m=b*a是等价的,数轴左边的a到数轴右边就是b了。

质数的定义就是只能整除本身和1的数,所以要判断小余本身能否被整除,能就不是质数
根号是为了缩小判断范围

这样 计算的次数是最少的 数学上已经证明了

因为一个数字开根号之后
如:

int a;
a == sqrt(a) * sqrt(a);

除了sqrt(a)之外,其他的两数乘积为a的,一定是比个比跟号a小,一个比跟号a大.
所以判断到sqrt(a)就可以了,因为另一半就是刚才做除法的商的那部份