Longge's problem(欧拉函数应用)
Description
"Oh, I know, I know!" Longge shouts! But do you know? Please solve it.
Input
A number N per line.
Output
Sample Input
2
6
Sample Output
3
15
题目意思:给定一个数n,求1-n的所有数与这个数的gcd之和。
解题思路:先引入欧拉函数概念,φ(n) :1到n-1有几个和x互质的数。
我们可以得知那些与n互质的数的gcd一定为1,也就是欧拉函数。而那些不与n互质的数gcd(i, n) = d ,d为n的约数。而这些约数必然是n的因子。
那么我们便可以想一想有没有什么方法可以直接将d相同的都找出来,我一瞬间想到的是筛法来筛去,但是筛法在面临很大的数的时候也会时间超限,所以需要换一种思路。我们会发现n的因子数很少啊,是不是可以直接去枚举因子呢?那么我就要判断gcd(i,n)中具有相同d的那些数,gcd(i,n)=d,i/d和n/d必须是互质的,也就是gcd(i/d,n/d)=1,而这个式子是什么?这就是求i/d和n/d互质的i在[1,n]里有几个,就等价于 1/d,2/d,...,n/d里面有几个和n/d互质,即φ(n/d)。接着求和约数为d的有φ(n/d)个,所以就是d*φ(n/d),同时把约数为n/d的加上去,i*i==n特判一下。
以12为例:1,2,3,4,5,6,7,8,9,10,11,12。首先我们用欧拉函数将与12互质的1,5,7,11剔除,12特殊也剔除。这时候的ans=1+1+1+1+12=16。
这时候剩下2,3,4,6,8,9,10这些数与12的gcd没有计算。
接着我们枚举12的因子,ans+=2*eular(6) 2*2=4 (约数为2的有2个)
ans+=3*eular(4) 3*2=6 (约数为3的有2个)
ans+=4*eular(3) 4*2=8 (约数为4的有2个)
ans+=6*eular(2) 6*1=6 (约数为6的有1个)
完全和真实情况相同
原数:2,3,4,6,8,9,10
与12的公约数:2,3,4,6,4,3,2
是不是两个2,两个3,两个4,一个6?
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long int
using namespace std;
ll eular(ll n)
{
ll i,ret=n;
for(i=; i<=sqrt(n); i++)
{
if(n%i==)
{
ret=ret/i*(i-);
while(n%i==)
{
n/=i;
}
}
}
if(n>)
{
ret=ret/n*(n-);
}
return ret;
}
int main()
{
ll n,num,i,j;
ll ans;
while(scanf("%lld",&n)!=EOF)
{ ans=eular(n)+n;
for(i=;i<=sqrt(n);i++)
{
if(n%i==)
{
if(i*i==n)
{
ans=ans+eular(i)*i;
}
else
{
ans=ans+eular(i)*(n/i);
ans=ans+eular(n/i)*i;
}
}
}
printf("%lld\n",ans);
}
return ;
}
Longge's problem(欧拉函数应用)的更多相关文章
- poj 2480 Longge's problem [ 欧拉函数 ]
传送门 Longge's problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7327 Accepted: 2 ...
- POJ 2480 Longge's problem 欧拉函数—————∑gcd(i, N) 1<=i <=N
Longge's problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6383 Accepted: 2043 ...
- poj 2480 Longge's problem 欧拉函数+素数打表
Longge's problem Description Longge is good at mathematics and he likes to think about hard mathem ...
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2553 Solved: 1565[Submit][ ...
- Bzoj 2705: [SDOI2012]Longge的问题 欧拉函数,数论
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1959 Solved: 1229[Submit][ ...
- 【bzoj2705】[SDOI2012]Longge的问题 欧拉函数
题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). 输入 一个整数,为N. 输出 ...
- BZOJ2705: [SDOI2012]Longge的问题(欧拉函数)
题意 题目链接 Sol 开始用反演推发现不会求\(\mu(k)\)慌的一批 退了两步发现只要求个欧拉函数就行了 \(ans = \sum_{d | n} d \phi(\frac{n}{d})\) 理 ...
- [SDOI2012] Longge的问题 - 欧拉函数
求 \(\sum\limits_{i=1}^{n}gcd(i,n)\) Solution 化简为 \(\sum\limits_{i|n}^{n}φ(\dfrac{n}{i})i\) 筛出欧拉函数暴力求 ...
- UVa 10837 A Research Problem 欧拉函数
题意: 给你一个欧拉函数值 phi(n),问最小的n是多少. phi(n) <= 100000000 , n <= 200000000 解题思路: 对于欧拉函数值可以写成 这里的k有可能是 ...
- Bzoj-2705 Longge的问题 欧拉函数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2705 题意: 求 sigma(gcd(i,n), 1<=i<=n<2^3 ...
随机推荐
- 替代alert的消息框和提示框
alert提示框由于外观不太友好,所以一般都不用alert了. 我在这里使用bootstrap的样式,写了一个可以单独显示消息,也可以确认取消的提示框,确认,取消的采用模式对话框方式,用一个div遮盖 ...
- vrrp_script不起作用解决方案
我这里主要是因为windows转码造成的:将可执行的check_nginx.sh检测脚本内容复制到U盘,然后插入内网windows,将内容用nodepad++打开,复制,粘贴到服务器的check_ng ...
- 请给出如下格式的date命令 例:11-02-26.再给出实现按周输出 比如:周六输出为6,请分别给出命令。
请给出如下格式的date命令 例:19-01-18.再给出实现按周输出 比如:周六输出为6,请分别给出命令. 解答: 方法1: [root@zhaokang ~]# date2019年 01月 17日 ...
- 1、win10下的Docker+Redis 的下载及简单使用
一.下载Docker: 因为始终注册docker账号不成功,所以在这里点击下载. 选中docker-for-windows/ 选中beta/ 下载这个.msi文件 二.安装 1.安装.msi文件,桌面 ...
- Python学习 :常用模块(三)----- 日志记录
常用模块(三) 七.logging模块 日志中包含的信息应有正常的程序访问日志,还可能有错误.警告等信息输出 python的 logging 模块提供了标准的日志接口,你可以通过它存储各种格式的日志, ...
- PAT (Basic Level) Practice (中文)1001
1001 害死人不偿命的(3n+1)猜想 (15 分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复 ...
- 折腾VIM的C++缩进
自己是2014年的时候,开始学习VIM编辑器.记得当时把整个VIM入门手册几乎通读了一边,为其强大的功能和便捷的操作所折服. 今天再次捣鼓了以下VIM,只因为用VIM编辑C++的代码时,类中的publ ...
- C#基础 base与this关键字
base和this在C#中被归于访问关键字,顾名思义,就是用于实现继承机制的访问操作来满足对对象成员的访问,从而为多态机制提供更加灵活的处理方式. this是指当前对象本身,而base则是在继承类中访 ...
- 实验一:实现求正整数1-N之间所有质数的功能,并进行测试。
实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 命令行下的程序开 ...
- ubuntu装openVPN会遇到的问题
与Windows系统相比,Linux下安装OpenVPN的过程就显得有点曲折. 如果你使用的是Ubuntu系统,你可以直接使用命令sudo apt-get install -y openvpn来安装O ...