[複雜度分析]HDU4473 Exam 題解

題目大意

定義f(x)=a=1+b=1+[abx]f(x)=\sum_{a=1}^{+\infty}\sum_{b=1}^{+\infty}[ab|x],求i=1nf(i)\sum_{i=1}^nf(i)n1011n\le10^{11}

解題分析

嗯……轉化一道就是求abcnabc\le n的組數,然後……玄學枚舉一下?

先枚舉最小的a,然後枚舉較大的b,統計最大的c個數,然後排列組合,分類討論瞭解一下?

時間複雜度O(n23)O(n^{\frac{2}{3}}),詭異……

示例代碼

題目傳送門

#include<cstdio>
using namespace std;
typedef long long LL;
LL n; int tst;
LL _work(LL n){
	LL ans=0;
	for (LL a=1;a*a*a<=n;a++)
		for (LL b=a;a*b*b<=n;b++){
			LL c=n/(a*b); if (c<b) break;
			if (a==b) ans+=(c-b)*3+1; else ans+=(c-b)*6+3;
		}
	return ans;
}
int main()
{
	freopen("exam.in","r",stdin);
	freopen("exam.out","w",stdout); tst=0;
	while (scanf("%lld",&n)==1) printf("Case %d: %lld\n",++tst,_work(n));
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章