GCD - Extreme(欧拉函数变形)
题目链接:https://vjudge.net/problem/UVA-11426

题目大意: 给出整数n∈[2,4000000],求解∑gcd(i,j),其中(i,j)满足1≤i<j≤n.
的确没有想到是欧拉函数,这怎么会想到欧拉函数呢? 又不是要我们求所有gcd为1的个数 那些gcd不为1的怎么办呢? 当时怎么就没想到呢 除过去不就变为1了吗 自己是真的菜。。。
还是要多做题,把思维开阔起来!!!
思路在代码中 直接看代码:
/**
欧拉函数三个性质
是素数的话 欧拉函数值等于它本身-1
如果a是素数 b%a==0 则phi[b*a]=phi[b]*a
如果b%a!=0 则phi[b*a]=phi[b]*phi[a]
*/
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
const int maxn=4e6+;
LL N;
LL phi[maxn],vis[maxn],p[maxn];//欧拉函数值 是否是素数 存素数
LL f[maxn],ans[maxn];
void Init()//求欧拉函数值
{
phi[]=;
int num=;
for(int i=;i<maxn;i++)
{
if(!vis[i])//是素数
{
p[num++]=i;
phi[i]=i-;//素数的欧拉函数值就等于它的值-1
}
for(int j=;j<num&&p[j]*i<maxn;j++)
{
vis[p[j]*i]=true;//肯定不是素数
if(i%p[j]==)
{
phi[i*p[j]]=p[j]*phi[i];
break;
}
else phi[i*p[j]]=phi[i]*phi[p[j]];
}
} // for(int i=1;i<=10;i++) cout<<i<<":"<<phi[i]<<" ";
return ;
}
/** 假设n等于4
(1,2) (2,3) (3,4)
(1,3) (2,4)
(1,4) 假设f[n]=(1,n)+(2,n)+···(n-1,n)
则 ans=f[2]+f[3]+···+f[n] 所以我们要求的就是f[n] 假设 gcd(1,n) gcd(2,n) ··· gcd(n-1,n)中等于i的有si个
那么gcd(s1,n)=i gcd(s2,n)=i gcd(si,n)=i
则 gcd(s1/i,n/i)=1 gcd(s2/i,n/i)=1 gcd(si/i,n/i)=1
这岂不是转换成了 总个数phi[n/i]的情形了 所以f[n]=i*phi[n/i] */
void solve()//存f[n]
{
phi[]=;
for(int i=;i<maxn;i++)//遍历i的值 同时得到f[n]的部分值
{
for(int j=i;j<maxn;j+=i)//遍历n的值
{
f[j]+=i*phi[j/i];
}
}
for(int i=;i<maxn;i++) ans[i]=ans[i-]+f[i];
return ;
}
int main()
{
Init();
solve();
//while(scanf("%lld",&N)!=EOF)
while(cin>>N)
{
if(N==) break;
cout<<ans[N]<<endl;
//printf("%lld\n",ans[N]);
}
return ;
}
GCD - Extreme(欧拉函数变形)的更多相关文章
- 【BZOJ】2818: Gcd(欧拉函数+质数)
题目 传送门:QWQ 分析 仪仗队 呃,看到题后感觉很像上面的仪仗队. 仪仗队求的是$ gcd(a,b)=1 $ 本题求的是$ gcd(a,b)=m $ 其中m是质数 把 $ gcd(a,b)=1 $ ...
- hdu2588 GCD (欧拉函数)
GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数. (文末有题) 知 ...
- uva11426 gcd、欧拉函数
题意:给出N,求所有满足i<j<=N的gcd(i,j)之和 这题去年做过一次... 设f(n)=gcd(1,n)+gcd(2,n)+......+gcd(n-1,n),那么answer=S ...
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1787 GCD Again(欧拉函数,水题)
GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 4983 Goffi and GCD(欧拉函数)
Problem Description Goffi is doing his math homework and he finds an equality on his text book: gcd( ...
- hdu 1695 GCD(欧拉函数+容斥)
Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD( ...
- HDU 1695 GCD(欧拉函数+容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...
- GCD(欧拉函数)
GCD Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
随机推荐
- C# 给图片添加透明的文字、图片水印
#region 添加水印 /// <summary> /// 添加文字水印 /// </summary> /// <param name="image" ...
- C# 由范式编程==运算符引发对string内存分配的思考
今天在看C#编程指南时(类型参数的约束http://msdn.microsoft.com/zh-cn/library/d5x73970.aspx)看到一段描述: 在应用 where T : class ...
- (转)深入研究MiniMVC之后续篇
今天在园子看到<深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的>之后,本来是不打算开博来续这个后传,不过,在那边回了个评论之后, ...
- pdo 预处理
<?php /* * pdo 预处理sql */ $dsn = "mysql:dbname=0328;host=localhost"; $username = " ...
- Jmeter_使用IE代理录制脚本
因为项目登录的密码需要RSA加密,选用了jmeter作为压测工具: 就自己本次项目,顺便学习Jmeter,做一个简单的记录,本文主要介绍使用IE代理录制脚本: 自己也尝试过使用Badboy录制,还是喜 ...
- PS基本操作汇总(持续更新)
一.放大缩小图片:ctrl+/- 二.缩小gif:ps时打开后,web格式保存,里面点出优化面板,选gif格式,颜色数减小,如128,损耗30,图片大小也可调整,比如调整为50%,点击预览,可在浏览器 ...
- 【bzoj4036】[HAOI2015]按位或 fmt+期望
Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal 的or)操作.选择数字i的概率是p[i].保证0&l ...
- 190320运算符&数据类型
一.运算符 1.算术运算符 + 加 - 减 * 乘 / 除 ** 平方 // 整除 % 取余 2.比较运算符 == 等于 > 大于 < 小于 <= 小于等于 >= 大于等于 ! ...
- SDUT OJ 顺序表应用1:多余元素删除之移位算法
顺序表应用1:多余元素删除之移位算法 Time Limit: 1000 ms Memory Limit: 650 KiB Submit Statistic Discuss Problem Descri ...
- php代码书写习惯优化小结
(1)使用 static 静态方法比普通方法快4倍(2)echo输出快于print(3)连接字符使用 , 代替 .(4)循环之前先取出最大值,而不是在循环里面取值 正确的方法 $max ...