for(int i=1;i*i<=n;i++)这个是为什么
来源:2-8 常见的时间复杂度
warren_au
2020-08-12 19:50:58
for(int i=1;i*i<=n;i++)这个是为什么
2回答
抱歉,我没有理解你的问题。什么为什么?
假蛙工程师
2021-10-10
一个正整数的约束就是该数可以整除的数,例如4,它的约数为1,2 ,4.
求一个数n的约数,可以使用遍历的方式将n把1到n除一遍。
也可以简单点的方法,约数几乎都是成对出现的,这是由于它的定义决定的。例如16/2=8 ,那么必然存在16/8=2;
a*b=n 假设a<=b 必有a<=sqrt(n) b>=sqrt,所以只需i<=sqrt即可,大于sqrt(n)的约数可以通过n/i求得到。
i<=sqrt(n) 两边同时平方,i*i <=n
相似问题