BZOJ 2705 SDOI2012 Longge的问题 因数分解+欧拉函数

题目大意:给定n,求Σgcd(i,n) (1<=i<=n)

n<=2^32

记fi为n的因数,则Σgcd(i,n)=Σphi(n/fi)*fi

记住分解因数和分解质数时都要用O(√n)的方法 不然准T

然后2^32-1不是质数 找质数验证的时候试试2147483647吧

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 10010
using namespace std;
typedef long long ll;
ll n,ans;
ll f[M];
void Get_Factor(ll x)
{
	ll i;
	for(i=1;i*i<x;i++)
		if(x%i==0)
			f[++f[0]]=i,f[++f[0]]=x/i;
	if(i*i==x)
		f[++f[0]]=i;
}
ll Phi(ll x)
{
	ll i,re=x;
	for(i=2;i*i<=x;i++)
		if(x%i==0)
		{
			re/=i;
			re*=i-1;
			while(x%i==0)
				x/=i;
		}
	if(x!=1)
		re/=x,re*=(x-1);
	return re;
}
int main()
{
	int i;
	cin>>n;
	Get_Factor(n);
	for(i=1;i<=f[0];i++)
		ans+=Phi(n/f[i])*f[i];
	cout<<ans<<endl;
}
时间: 2024-10-20 19:55:44

BZOJ 2705 SDOI2012 Longge的问题 因数分解+欧拉函数的相关文章

BZOJ 2705 [SDOI2012]Longge的问题(欧拉函数)

[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2705 [题目大意] 求出∑gcd(i,N)(1<=i<=N) [题解] $∑_{i=1}^{N}gcd(i,N)$ $=∑_{i=1}^{N}∑_{d|gcd(i,N)}\phi(d)$ $=∑ \phi(d)∑ _{1=<i<=N \land d|i \land d|N}1$ $=∑_{d|N}\phi(d)\lfloor\frac{i}{d}\rfloor$ [代码

【POJ 2480】Longge&#39;s problem(欧拉函数)

题意 求$ \sum_{i=1}^n gcd(i,n) $ 给定 $n(1\le n\le 2^{32}) $. 链接 分析 用欧拉函数$φ(x)$求1到x-1有几个和x互质的数. gcd(i,n)必定是n的一个约数.若p是n的约数,那么gcd(i,n)==p的有$φ(n/p)$个数,因为要使gcd(i,n)==p,i/p和n/p必须是互质的.那么就是求i/p和n/p互质的i在[1,n]里有几个,就等价于,1/p,2/p,...,n/p里面有几个和n/p互质,即φ(n/p). 求和的话,约数为p

POJ2480:Longge&#39;s problem(欧拉函数的应用)

题目链接:传送门 题目需求: Given an integer N(1 < N < 2^31),you are to calculate ∑gcd(i, N) 1<=i <=N. 这题就是上一篇博客的变形. 题目解析:首先先求出与N互质的个数,即N的欧拉函数值,之后分解出N的因子来,求解方法如下. 证明: 要求有多少个 i 满足gcd(i, N) = d 如果gcd(i, N) = d,则gcd(i/d, N/d) = 1 由于i <= N,所以 i/d <= N/d,

POJ 2480 Longge&#39;s problem (欧拉函数+乘性函数)

Longge's problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7343   Accepted: 2422 Description Longge is good at mathematics and he likes to think about hard mathematical problems which will be solved by some graceful algorithms. Now

Longge&#39;s problem(欧拉函数应用)

Description Longge is good at mathematics and he likes to think about hard mathematical problems which will be solved by some graceful algorithms. Now a problem comes: Given an integer N(1 < N < 2^31),you are to calculate ∑gcd(i, N) 1<=i <=N.

【POJ】2480 Longge&#39;s problem(欧拉函数)

题目 传送门:QWQ 分析 题意就是求∑gcd(i, N) 1<=i <=N.. 显然$ gcd(i,n) = x $时,必然$x|n$. 所以我们枚举一下n的约数,对于每个约数x,显然$ gcd(i/x,n/x)=1$ 所以我们计算一下n/x的欧拉函数就ok了. 联赛前刷水题qwq 代码 // #include <bits/stdc++.h> #include <cstdio> #include <cmath> #include <algorithm

题解报告:poj 2480 Longge&#39;s problem(欧拉函数)

Description Longge is good at mathematics and he likes to think about hard mathematical problems which will be solved by some graceful algorithms. Now a problem comes: Given an integer N(1 < N < 2^31),you are to calculate ∑gcd(i, N) 1<=i <=N. 

Bzoj 2705: [SDOI2012]Longge的问题 欧拉函数,数论

2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1959  Solved: 1229[Submit][Status][Discuss] Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一个整数,为N. Output 一个整数,为所求的答案. Sample Inp

BZOJ 2705: [SDOI2012]Longge的问题( 数论 )

---恢复内容开始--- T了一版....是因为我找质因数的姿势不对... 考虑n的每个因数对答案的贡献. 答案就是 ∑ d * phi(n / d) (d | n) 直接枚举n的因数然后求phi就行了. 但是我们可以做的更好. 注意到h(n) = ∑ d * phi(n / d) (d | n) 是狄利克雷卷积的形式, 而且f(x) = x 和 f(x) = phi(x) 都是积性函数, 所以答案h(x) 也是积性函数. 所以h(x) = Π h(p^k) (p 是 x 的质因数) 由phi(