欧拉函数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.

最新文章

  1. C/C++编程语言学习资料尽收眼底 电子书+视频教程
  2. C#中的常见集合类的比较
  3. codevs2693 上学路线(施工)
  4. 【openGL】画直线
  5. ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法
  6. CSS 类选择器
  7. HashedWheelTimer 原理
  8. python实现简单爬虫抓取图片
  9. Mininet实验 使用l2_multi模块寻找最短路径实验
  10. AlarmReceiver 与IntentService的使用
  11. 使用CocoaPods找不到头文件解决方法
  12. JNI(2)
  13. ESLint系列:ESLint入门安装及简单配置
  14. Java线程同步锁
  15. chrome 开发者工具,查看元素 hover 样式
  16. Django实现Rbac权限管理
  17. ALGO-121_蓝桥杯_算法训练_猴子分苹果
  18. 搞定pycharm专业版的安装
  19. Day1 Excel基本知识
  20. 面试题28:单链表一次遍历删除从后往前的第n个节点

热门文章

  1. mysql 大数据分页查询优化
  2. 第二十二篇 正在表达式 re模块
  3. Spring实战第四章学习笔记————面向切面的Spring
  4. 九度OJ--1165(C++)
  5. 第十五次ScrumMeeting会议
  6. CodeForces Round #521 (Div.3) D. Cutting Out
  7. el-input怎么绑定回车事件
  8. Kafka数据辅助和Failover
  9. C#的23种设计模式概括
  10. TCP/IP Note3