社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define M 1000
int main()
{
int i,j;
for(i=2;i<M;i++)
{
int sum=0;
for(j=1;j<=sqrt(i);j++)
{
if((i%j)==0)
{
sum=sum+j+(i/j);
}
}
//判断是否为完全数,如果是,则打印其因子
if(i==sum-i)
{
printf("%d is factors number: ",i);
for(j=1;j<i;j++)
{
if(i%j==0)
printf("%d ",j);
}
printf("n");
}
}
return 0;
}
小编对此代码的时间复杂度较为满意的,刚开始小编是从1到 i-1 来求其因子的,这样光判断是否为合数时间复杂度就已经基本为M^M了,小编这个代码的时间复杂度为M*sqrt(M),相比起前者,时间复杂度得到了更好的优化。大家可以将M的值给到100000就能很清楚的感受到了。
因为时间原因,后期小编再为大家提供另一种解决思路,今天举出来的解法时间复杂度还是有点大,我们应该寻找更优的解法,大家也可以留言谈谈你对此题的高见!欢迎大家批评留言及讨论!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!