FOJ 1012 Relatives
来源: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相关推荐
- 【算法学习笔记】43.动态规划 逆向思维 SJTU OJ 1012 增长率问题
1012. 增长率问题 Description 有一个数列,它是由自然数组成的,并且严格单调上升.最小的数不小于S,最大的不超过T.现在知道这个数列有一个性质:后一个数相对于前一个数的增长率总是百分比 ...
- 浙江大学PAT考试1009~1012(1010上帝是冠军。。)
哎,pat1010即使java书面,只有java书面,还增加了两个点,,.啊,智商捉佳,主要pat有些不给明确的范围.造成遐想空间.. 还是按顺序介绍.. 题目地址:http://pat.zju.ed ...
- 【异常】Error: ERROR 1012 (42M03): Table undefined. (state=42M03,code=1012)
[异常]Error: ERROR 1012 (42M03): Table undefined. (state=42M03,code=1012) 参考文章: (1)[异常]Error: ERROR 10 ...
- 【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012 题意:维护一个数列,开始时没有数值,之后会有两种操作, Q L :查询数列末 ...
- 1012: [JSOI2008]最大数maxnumber
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Submit: 10711 Solved: 4683 [Su ...
- 1012: [JSOI2008]最大数maxnumber 线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=1012 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数 ...
- BZOJ 1012 最大数
Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...
- PAT甲级1012 The Best Rank :[C++题解]4个成绩取排名最低:排序、二分(好题)
文章目录 题目分析 题目链接 题目分析 遇到的问题:信息存在结构体(✖)中,然后排名呢?需要分别对 C.M.E.A排四次吗? 这里成绩的存储 用二维数组 vector<int> q[4]; ...
- [BZOJ 1012] 最大数maxnumber
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1012 分析 维护后缀最大值 类似暴力的求解, A数组记录数值, maxv记录从当前位置向后的最 ...
最新文章
- Python 标准库之 sys
- 3DSlicer11:体系结构2
- 线程池应该设置多少核心线程数——Java多线程系列学习笔记
- 协议转换器安全使用须知
- php创建多级栏目_用PHP实现多级树型菜单
- PFSense 2.1 端口映射配置
- 编程之美 1.4买书问题常数时间空间解法
- TimePicker使用全解
- 在Status状态栏中的出现Out of date shapes问题解决方式
- 白化滤波器matlab程序,04实验四:白化滤波器的设计实验报告
- python操作xlsx格式文件
- NOPI 读取EXCEL数据时报错“未将对象引用设置到对象的实例”的变相解决方案
- 手机录音文件如何转换成文本?具体如何操作?
- Sql server 去除字段回车换行符
- php webcam,如何使用Dynamic Web TWAIN附加组件构建PHP Webcam App
- 第八天 Python爬虫之Rquests库打码平台的简单使用
- 数字197可以被称为循环素数,因为197的三个数位循环移位后的数字:197,971,719均为素数。100以内这样的数字包括13个,2,3,5,7,11,13,17,31,37,71,73,79,97
- CorelDRAW平面设计标准教程免费视频教程
- ABAP SY-系统值
- java怎么编写嗖嗖手机_JAVA项目-嗖嗖移动