首先是暴力破解优化,最先想到的
#include <stdio.h>
#include <math.h>
int main()
{
int n,m,i;
scanf("%d",&n);
while(n>0)
{
n--;
scanf("%d",&m);
int sum=1,t=sqrt(m);//暴力2-sqrt(m)所有数不会超时,1-m/2 1-m都会超时
for(i=2; i<=t; i++)
{
if(m%i==0)
{
if(m/i==i)//防止7*7=49,7算两次
sum+=i;
else
sum+=(i+m/i);
}
}
printf("%d\n",sum);
}
return 0;
}
最快的方法应该是打表,记忆搜索。这样避免重复计算
//一,打表法,这个速度最快
#include<stdio.h>
int a[500000];
int main()
{
int t,n,i,j;
for(i=1;i<=500000;i++)
a[i]=1;
for(i=2;i<=250000;i++)
for(j=i+i;j<=500000;j+=i)
a[j]=a[j]+i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%d/n",a[n]);
}
return 0;
}