来源:http://acm.fzu.edu.cn/problem.php?pid=1012

概述:计算不大于n而和n互素的正整数的个数。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参考文献:陈景润,《初等数论II》第五章,百度网盘下载,以下截图均来自参考文献。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

理论分析

其实,题目要计算的正是欧拉函数:

推导和详细内容,可以参阅《初等数论II》,这里只需记住该结论:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

编程求解

关键是写出欧拉函数。

1、函数命名上,常见的是euler,也可以使用希腊字母φ的拉丁语写法:phi。这里我用euler,而以后如果要保存返回值,变量名用phi。

2、找n的质因数:利用《数论》里的知识,n最小的约数一定是它的质因数。ans记录答案,先初始化为1。i从2开始遍历,每找到一个质因数,ans先自乘i-1,n自除i,然后进入while循环,判断该质因数的次幂大小。当i*i>n时,n不能再分解为两个及以上约数相乘,故跳出循环。然后要判断n是否不等于1,即最后的n本身也是一个的质因数时,ans需要自乘n-1。

#include <cstdio>
using namespace std;int euler(int n)
{int i, ans = 1;for (i = 2; i*i <= n; i++){if (n%i==0){ans *= i-1, n /= i;while (n%i==0) ans *= i, n /= i;}}if (n!=1) ans *= n-1;return ans;
}int main()
{int n;do{scanf("%d", &n);if (n) printf("%d\n", euler(n));else break;}while (1);return 0;
}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

扩展应用:欧拉函数在以后的快速幂模运算中将会有大用场,记得保存好该模板。

FOJ 1012 Relatives相关推荐

  1. 【算法学习笔记】43.动态规划 逆向思维 SJTU OJ 1012 增长率问题

    1012. 增长率问题 Description 有一个数列,它是由自然数组成的,并且严格单调上升.最小的数不小于S,最大的不超过T.现在知道这个数列有一个性质:后一个数相对于前一个数的增长率总是百分比 ...

  2. 浙江大学PAT考试1009~1012(1010上帝是冠军。。)

    哎,pat1010即使java书面,只有java书面,还增加了两个点,,.啊,智商捉佳,主要pat有些不给明确的范围.造成遐想空间.. 还是按顺序介绍.. 题目地址:http://pat.zju.ed ...

  3. 【异常】Error: ERROR 1012 (42M03): Table undefined. (state=42M03,code=1012)

    [异常]Error: ERROR 1012 (42M03): Table undefined. (state=42M03,code=1012) 参考文章: (1)[异常]Error: ERROR 10 ...

  4. 【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012 题意:维护一个数列,开始时没有数值,之后会有两种操作, Q L :查询数列末 ...

  5. 1012: [JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 10711  Solved: 4683 [Su ...

  6. 1012: [JSOI2008]最大数maxnumber 线段树

    https://www.lydsy.com/JudgeOnline/problem.php?id=1012 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数 ...

  7. BZOJ 1012 最大数

    Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...

  8. PAT甲级1012 The Best Rank :[C++题解]4个成绩取排名最低:排序、二分(好题)

    文章目录 题目分析 题目链接 题目分析 遇到的问题:信息存在结构体(✖)中,然后排名呢?需要分别对 C.M.E.A排四次吗? 这里成绩的存储 用二维数组 vector<int> q[4]; ...

  9. [BZOJ 1012] 最大数maxnumber

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1012 分析 维护后缀最大值 类似暴力的求解, A数组记录数值, maxv记录从当前位置向后的最 ...

最新文章

  1. Python 标准库之 sys
  2. 3DSlicer11:体系结构2
  3. 线程池应该设置多少核心线程数——Java多线程系列学习笔记
  4. 协议转换器安全使用须知
  5. php创建多级栏目_用PHP实现多级树型菜单
  6. PFSense 2.1 端口映射配置
  7. 编程之美 1.4买书问题常数时间空间解法
  8. TimePicker使用全解
  9. 在Status状态栏中的出现Out of date shapes问题解决方式
  10. 白化滤波器matlab程序,04实验四:白化滤波器的设计实验报告
  11. python操作xlsx格式文件
  12. NOPI 读取EXCEL数据时报错“未将对象引用设置到对象的实例”的变相解决方案
  13. 手机录音文件如何转换成文本?具体如何操作?
  14. Sql server 去除字段回车换行符
  15. php webcam,如何使用Dynamic Web TWAIN附加组件构建PHP Webcam App
  16. 第八天 Python爬虫之Rquests库打码平台的简单使用
  17. 数字197可以被称为循环素数,因为197的三个数位循环移位后的数字:197,971,719均为素数。100以内这样的数字包括13个,2,3,5,7,11,13,17,31,37,71,73,79,97
  18. CorelDRAW平面设计标准教程免费视频教程
  19. ABAP SY-系统值
  20. java怎么编写嗖嗖手机_JAVA项目-嗖嗖移动

热门文章

  1. cordova编译crosswalk-webview插件报错的处理办法
  2. 银行卡发卡行标识代码及卡号
  3. 【Java】如何使用Java API?
  4. 查看工作组计算机 无法访问 没有权限使用网络资源
  5. 数字音频Mixer算法
  6. 实验八 项目案例-电商数据分析
  7. 杨元庆:设备是联想的命根 手机是物联网基础
  8. 【Springboot】集成百度地图实现定位打卡功能
  9. 【Fortran】过程设计之一(子例程SUBROUTINE)
  10. 如何设置页面的上边距和下边距