求C语言高手:问题如下:输入一个数N(N<=5000000)求出他所有因子的和(本身不算做因子)

来源:百度知道 编辑:UC知道 时间:2024/05/25 00:45:34
高手帮帮忙,思路或代码均可,注意时间复杂度不要超过200ms

200ms这要求太宽松了。。。

#include "time.h"
#include "math.h"

int fsum(int n){
int sum=0;
for (int i=2;i<=sqrt(n)/2;i++)
if (n%i==0)
sum+=i+n/i;
return sum;
}
void main(){
int n=time(0);
for (int i=0;i<10000;i++)
fsum(5000000);
printf("%d",time(0)-n);
}

先求出N以内所有素数.然后用这些素数去除N,能整除的算素数因子.然后把素数因子相乘得到小于N的合数因子

用开空间的方法定义一个长为N的数组n,除第一个为1外,其它数据均为0,long sum=0
i从1开始循环直到N-1,若n[i]==0则说明i是N的因数,sum+=i,并且将数组中所有i的倍数a[i],a[i*2]……a[i*l](i*(l+1)>=N)=1

楼下的,运行时间200ms...

#include"stdio.h"
main()
{
long value,i,sum=0;
printf("enter a value:");
scanf("%ld",&value);
for(i=2;i<value;i++)
{
if(value%i==0)
sum+=i;
}
printf("The sum is %ld",sum);
}