/*
在循环很大的时候
用
scanf("%d",&n) ;
printf("%d\n",dp[n]);
与
cin>>n;
cout<<dp[n]<<endl;
相别很大;
第一个会节约大量的时间
下面这个超时
在循环很大的时候
用
scanf("%d",&n) ;
printf("%d\n",dp[n]);
与
cin>>n;
cout<<dp[n]<<endl;
相别很大;
第一个会节约大量的时间
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=500010;
int n,sum,i,j;
int dp[N]={0};
void DP()
{
for(i=1;i<=N;i++)
{
for(j=2;i*j<=N;j++)
{
dp[i*j]=dp[i*j]+i;
}
}
}
int main()
{
DP();
int T;
scanf("%d",&T);;
while(T--)
{
scanf("%d",&n);
printf("%d\n",dp[n]);
}
return 0;
}
下面这个超时
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int N=500010; int n,sum,i,j; int dp[N]={0}; void DP() { for(i=1;i<=N;i++) { for(j=2;i*j<=N;j++) { dp[i*j]=dp[i*j]+i; } } } int main() { int T; cin>>T; while(T--) { cin>>n; cout<<dp[n]<<endl; } return 0; }