- A New Function
- LightOJ - 1098
- 题意:求1-n这些数的每个数的非平凡因子,也就是(除1与本身外所有因子)总和
- 思路:以sqrt(n)为分界降一下复杂度,求一下分别出现2-sqrt(n)次的因子的总和,这个可以一段一段的求
- 利用等差数列求和 ,然后剩下的出现次数较多的可以不必按照次数跑,直接对每个数进行求解,求和即可。
-
#include<bits/stdc++.h> using namespace std; #define ll unsigned long long ll n,t,lim,pos,to,ans; int main() { scanf("%lld",&t); for(int qq=1; qq<=t; qq++) { ans=0; scanf("%lld",&n); lim=sqrt(n); pos=n/2; for(int i=2; i<=lim; i++) { to=n/(i+1); ans+=(pos-to)*(pos+to+1)*(i-1)/2; pos=to; } for(int i=2; i<=pos; i++) ans+=(n/i-1)*i; printf("Case %d: %lld\n",qq,ans); } return 0; }
A New Function -因子贡献度
最新推荐文章于 2024-03-29 17:49:31 发布