HDU 1215 七夕节

Posted jpphy0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1215 七夕节相关的知识,希望对你有一定的参考价值。

0 链接

HDU 1215 七夕节 - http://acm.hdu.edu.cn/showproblem.php?pid=1215

1 分析

  • 枚举约数,复杂度 O ( T ⋅ n ) O(T\\cdot\\sqrt{n}) O(Tn )
  • 埃氏筛法,复杂度 O ( n ⋅ log ⁡ ( n ) + T ) O(n\\cdot \\log(n)+T) O(nlog(n)+T)
  • 线性筛法,复杂度 O ( n + T ) O(n+T) O(n+T),利用除数和函数 σ ( n ) \\sigma(n) σ(n) 计算
    σ ( n ) = σ ( p 1 α 1 ⋯ p r α r ) = ∑ d ∣ n d = ∏ i = 1 r p i α i + 1 − 1 p i − 1 \\sigma(n)=\\sigma(p_1^{\\alpha_1}\\cdots p_r^{\\alpha_r})=\\sum_{d|n}d=\\prod_{i=1}^{r}\\frac{p_i^{\\alpha_i+1}-1}{p_i-1} σ(n)=σ(p1α1prαr)=dnd=i=1rpi1piαi+11

2 代码

枚举约数【358MS】

// hdu 1215 七夕节
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n, t, ans;
	scanf("%d", &t);
	while(t--){
		ans = 1;
		scanf("%d", &n);		
		for(int i = 2; i*i <= n; ++i){
			if(n % i == 0){
				ans += i;
				if(i*i < n) ans += n/i;
			}
		}
		printf("%d\\n", ans);
	}	
    return 0;
}

埃氏筛法【93MS】

// hdu 1215 七夕节
#include<bits/stdc++.h>
using namespace std;
#define MXN 500010
int d[MXN];
void init(){
	for(int i = 1; i < MXN; ++i){
		for(int j = i+i; j < MXN; j += i){// i不能是i的约数,只能是2i、3i、…的约数
			d[j] += i; 
		}
	}
}
int main(){
	int n, t;
	init();
	scanf("%d", &t);
	while(t--){
		scanf("%d", &n);		
		printf("%d\\n", d[n]);
	}	
    return 0;
}

线性筛法【78MS】

// hdu 1215 七夕节
#include<bits/stdc++.h>
using namespace std;
#define MXN 500010
int prim[MXN], vis[MXN], cnt, d[MXN];
void init(){
	int p;
	cnt = 0;
	memset(vis, 0, sizeof vis);
	for(int i = 2; i < MXN; ++i){
		if(vis[i] == 0){
			prim[++cnt] = i, vis[i] = i;
			for(int j = i; j < MXN; j *= i){
				vis[j] = i;
				d[j] = (j*i-1)/(i-1);
				if( j > MXN/i) break;
			}
		}
		for(int j = 1; j <= cnt; ++j){
			if(prim[j] >= vis[i] || i > MXN/prim[j]) break;
			p = prim[j];
			for(int k = i*prim[j]; k < MXN; k *= prim[j]){
				p *=  prim[j], vis[k] = prim[j];
				d[k] = d[i]*(p-1)/(prim[j]-1);
				if(k > MXN/prim[j]) break;
			}
		}
	}
}
int main(){
	int n, t;
	init();
	scanf("%d", &t);
	while(t--){
		scanf("%d", &n);		
		printf("%d\\n", d[n]-n);
	}
    return 0;
}

以上是关于HDU 1215 七夕节的主要内容,如果未能解决你的问题,请参考以下文章

hdu 1215 七夕节

HDU1215 七夕节(因子之和)

HDU 1215 七夕节(约数之和)

七夕节 HDU - 1215 (唯一分解 素数筛法 因子之和加强版)

hdu 1215 七夕节

hdu1215七夕节-(埃氏筛+唯一分解定理)