牛客练习赛25-A-因数个数和
题目描述
q次询问,每次给一个x,问1到x的因数个数的和。
输入描述:
第一行一个正整数q;
接下来q行,每行一个正整数x
输出描述:
共q行,每行一个正整数表示答案
输入
4 1 2 3 10
输出
1 3 5 27
说明
1的因数有1
2的因数有1,2
3的因数有1,3
以此类推
备注:
1<=q<=10 ,1<= x<=10^9
解题思路:简单打一下表结合OEIS大法,其实求1-n的因子个数的和与此求和一样,可以手推找规律。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL;LL n,ans,q; 4 int main(){ 5 while(cin>>q){ 6 while(q--){ 7 cin>>n;ans=0; 8 for(LL i=1;i*i<=n;++i){ 9 if(n/i!=i)ans+=n/i+(n/i-n/(i+1))*i; 10 else ans+=i; 11 } 12 cout<<ans<<endl; 13 } 14 } 15 return 0; 16 }