这题我开始暴力,结果TLE,后来想到这种题应该都有精简的方法,就去网上搜,没想到新学了一招,筛选法,估计最小公倍数也能这样做了,哈哈
#include<stdio.h>
#include<string.h>
long long num[500005];
void shaixuan( )
{
for( int i = 1; i < 500005; ++i )
num[i] = 1;
for( int i = 2; i < 500005; ++i )
for( int j = 2; j * i < 500005; ++j )
num[i*j] += i;
}
int main( )
{
shaixuan( );
int t,n;
scanf( "%d",&t );
while( t-- )
{
scanf( "%d",&n );
printf( "%I64d\n",num[n] );
}
return 0;
}
来源:https://www.cnblogs.com/Lvsi/archive/2011/05/05/2037247.html