欧拉函数phi[n]是表示1~n中与n互质的数个数。

可以用公式phi[n]=n*(1-1/p1)*(1-1/p2)*(1-1/p3)...*(1-1/pk)来表示。(p为n的质因子)


求phi[p]的过程:

 procedure calc(p:longint;var sum:longint);
var i:longint;
begin
sum:=p;
for i:= to trunc(sqrt(p)) do
if p mod i= then
begin
sum:=sum div i*(i-);
while p mod i= do p:=p div i;
// 保证每次都是质因子
end;
if p<> then sum:=sum div p*(p-);
// 如果p自身是质数的情况
end;

BZOJ2190

  直接套用即可,不处理1的情况最后加上3。需要注意的是读进来的方阵大小应该-1。

  直接贴代码。

 program bzoj2190;
const maxn=;
var n,i,ans:longint;
phi:array[-..maxn]of longint;
procedure calc(p:longint;var sum:longint);
var i:longint;
begin
sum:=p;
for i:= to trunc(sqrt(p)) do
if p mod i= then
begin
sum:=sum div i*(i-);
while p mod i= do p:=p div i;
end;
if p<> then sum:=sum div p*(p-);
end; begin
readln(n);dec(n);
for i:= to n do calc(i,phi[i]);
ans:=;
for i:= to n do inc(ans,phi[i]);
if n<> then writeln(ans*+) else writeln();
end.

BZOJ 2705

  刚开始看可能无从下手。但是再看一眼会发现,如果枚举某个数与n的最大公约数,再求出这样的数有多少的话可能就有方法处理了。

  我们来思考有多少个数与n的最大公约数是x,不难想出,当这个数/x,n/x的时候两数互质。也就是其个数=phi[n/x]!

  所以只需要枚举所有的最大公约数(枚举到sqrt(n))即可。

  需要注意的是如果n正好是完全平方数,sqrt(n)会被计算两次。于是特判。

  另外这道题给我们一点启发:sigma(phi[n/i])(n mod i=0)=n!

  虽然目前还没有发现有哪里可以应用,但是式子非常优美。。>_<

  

 program bzoj2705;
var i:longint;
ans,n:int64; function phi(p:int64):int64;
var i:longint;
ans:int64;
begin
ans:=p;
for i:= to trunc(sqrt(p)) do if p mod i= then
begin
ans:=ans*(i-) div i;
while p mod i= do p:=p div i;
end;
if p<> then ans:=ans*(p-) div p;
exit(ans);
end; begin
//sign(input,'a.in');reset(input);
while not eof do
begin
readln(n);
ans:=;
for i:= to trunc(sqrt(n)) do if n mod i= then
begin
inc(ans,i*phi(n div i));
if i*i<>n then inc(ans,(n div i)*phi(i));
end;
writeln(ans);
end;
end.

[BZOJ2190&BZOJ2705]欧拉函数应用两例的更多相关文章

  1. Bzoj-2190 仪仗队 欧拉函数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 简单的欧拉函数题,实际上就是求gcd(x,y)=1, 0<=x,y<=n ...

  2. NOIP模拟:切蛋糕(数学欧拉函数)

    题目描述  BG 有一块细长的蛋糕,长度为 n. 有一些人要来 BG 家里吃蛋糕, BG 把蛋糕切成了若干块(整数长度),然后分给这些人. 为了公平,每个人得到的蛋糕长度和必须相等,且必须是连续的一段 ...

  3. 51nod 1363 最小公倍数的和 欧拉函数+二进制枚举

    1363 最小公倍数之和 题目来源: SPOJ 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3 ...

  4. BZOJ2190 [SDOI2008]仪仗队 [欧拉函数]

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  5. BZOJ2190 [SDOI2008]仪仗队(欧拉函数)

    与HDU2841大同小异. 设左下角的点为(1,1),如果(1,1)->(x,y)和(1,1)->(x',y')向量平行,那只有在前面的能被看见.然后就是求x-1.y-1不互质的数对个数. ...

  6. BZOJ2705: [SDOI2012]Longge的问题(欧拉函数)

    题意 题目链接 Sol 开始用反演推发现不会求\(\mu(k)\)慌的一批 退了两步发现只要求个欧拉函数就行了 \(ans = \sum_{d | n} d \phi(\frac{n}{d})\) 理 ...

  7. 【bzoj2190】[SDOI2008]仪仗队 欧拉函数

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  8. 【bzoj2705】[SDOI2012]Longge的问题 欧拉函数

    题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). 输入 一个整数,为N. 输出 ...

  9. 【bzoj2190】: [SDOI2008]仪仗队 数论-欧拉函数

    [bzoj2190]: [SDOI2008]仪仗队 在第i行当且仅当gcd(i,j)=1 可以被看到 欧拉函数求和 没了 /* http://www.cnblogs.com/karl07/ */ #i ...

随机推荐

  1. 不同浏览器css引入外部字体的方式

    /** * 字体后缀和浏览器有关,如下所示 * .TTF或.OTF,适用于Firefox 3.5.Safari.Opera * .EOT,适用于Internet Explorer 4.0+ * .SV ...

  2. 问题 D: 约数的个数

    问题 D: 约数的个数 时间限制: 1 Sec  内存限制: 32 MB提交: 272  解决: 90[提交][状态][讨论版][命题人:外部导入] 题目描述 输入n个整数,依次输出每个数的约数的个数 ...

  3. mysql 连接问题

    用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...

  4. hbase1.2.6完全分布式安装

    环境,参考之前的两篇博文: jdk1.7 hadoop2.6.0 完全分布式 一个master,slave1,slave2,slave3 zookeeper3.4.6 完全分布式 安装与配置:(以下步 ...

  5. xml解析标签

    //获取两个标签之间的值 private static string GetStr(string message, string strStart, string strEnd) { ; ; star ...

  6. 基于SDN的IP RAN网络虚拟化技术

    http://www.zte.com.cn/cndata/magazine/zte_technologies/2014/2014_4/magazine/201404/t20140421_422858. ...

  7. vs2017切换设计、拆分假死的解决

    今天安装了vs2017版把vs2015卸载了,原因就是vs2015运行webform后ajaxpro总是会出现time out现象.太难受了,所以决定体验一下新版本. 安装了vs2017后ajaxpr ...

  8. java线程(2)——模拟生产者与消费者

    前言: 我们都听说过生产者和消费者的例子吧,现在来模拟一下.生产者生产面包,消费者消费面包.假定生产者将生成出来的面包放入篮子中,消费者从篮子中取.这样,当篮子中没有面包时,消费者不能取.当篮子满了以 ...

  9. ASP.NET MVC如何使用输出缓存

    通过这篇文章你将学习到在MVC中如何使用输出缓存,业务逻辑我就不多介绍了,主要是Outputcache的基本使用.至于数据缓存还是等我的下一篇文章吧,一步一步来不急的.   输出缓存的使用方法是在Co ...

  10. Docker实战系列一:初识Docker for Windows

    windows下安装Docker官网教程Install Docker for Windows Docker配置官网教程Get started with Docker for Windows