数据量比较大,筛选法求公因子和即可。
#include <iostream> #include<cstdio> #include<string.h> #define maxn 500005 using namespace std; int ans[maxn]; int main() { int cas; int n; cin >> cas; memset(ans,0,sizeof(ans)); for(int i = 1;i < maxn;i ++){ for(int j = 2;i*j < maxn;j ++){ ans[i*j] += i; } } while(cas --){ cin >> n; cout << ans[n] << endl; } return 0; }