NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述。
本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和。
记euler(x)公式能计算小于等于x的并且和x互质的数的个数;我们再看一下如何求小于等于n的和n互质的数的和, 我们用sum(n)表示;
定理:若gcd(x, a)=1,则有gcd(x, x-a)=1;
证明:反证法:假设gcd(x, x-a)=k (k>1),那么有(x-a)%k=0---1式,x%k=0---2式; 由1式和2式可得 a%k=0---3式; 由2式和3式可得gcd(x, a)=k,与gcd(x,a)=1矛盾,假设不成立,即原式得证;
由此我们可以得知小于x并且与x互质的数必然是成对出现的并且有对应的一对数和为x;所以有sum(n)=euler(n)/2*n;
故本题的写法为:
#include <iostream>
#include <cstdio>
using namespace std; const int N= ;
typedef long long LL; LL Euler(LL n){
LL ans = n;
for(int i = ; i * i <= n; i++){
if(n % i == ){
ans = ans / i * (i-);
while(n % i == )
n /= i;
}
}
if(n > ) ans = ans / n * (n-);
return ans;
} //计算得到小于n且与n互质的正整数的和
long long Euler_sum(long long n){
if(n==)
return ;
else
return n*Euler(n)/;
} int main(){
int t;
cin>>t;
while(t--){
LL n,m;
cin>>n>>m;
LL ans = ;
for(int i = ; i * i <= n; i++){
if(n % i == ){
if(i >= m){
int d = i;
ans = (ans+d*Euler_sum(n/d) ) %N;
//考虑gcd(x,n) 1<=x<=n
//其中gcd(x/d,n/d) = 1 ,Euler(n/d)我们得到的是能够使得gcd(x,n) = d 的x的取值的个数
//Euler_sum(n/d)我们得到的是小于n/d且与n/d互质的正整数的和
//暂且设“小于n/d且与n/d互质的正整数”分别为a1,a2...an等那么乘以d之后得到的数列b1 = a1*d b2 = a2*d ...bn = an*d
//那么b1 b2 ...bn等数与n的公约数就是d ,而d>=m,满足题设
//所以在公约数为d的情况下这些能够满足gcd(x,n) = d >=m的数的和,即b1+b2+...bn = (a1+a2+...+an)*d,
//而(a1+a2+...+an) = Euler_sum(n/d) 故b1+b2+...bn = d*Euler_sum(n/d)
//这样就处理完了公约数为d的情况,同理按照for循环,1~sqrt(n)遍历,
//分别测试公约数为别等于i(i从1到sqrt(n)遍历)是否满足n%i==0即可,若满足就令d=i,ans+=d*Euler_sum(n/d)
}
if(i * i != n && n / i >= m){
int d = n / i;
ans = (ans+ d*Euler_sum(n/d) )%N;
//在上部for循环中进行到sqrt(n),这一步就是处理后面的东西:n/i
}
}
}
cout<<ans<<endl;
}
return ;
}
NYOJ 1007的更多相关文章
- GCD nyoj 1007 (欧拉函数+欧几里得)
GCD nyoj 1007 (欧拉函数+欧几里得) GCD 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 The greatest common divisor ...
- nyoj 1007 GCD(数学题 欧拉函数的应用)
GCD 描述 The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b) ...
- poj 1007 (nyoj 160) DNA Sorting
点击打开链接 DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 75164 Accepted: 30 ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- SCNU 2015ACM新生赛初赛【1007. ZLM的扑克牌】解题报告
题目链接详见SCNU 2015新生网络赛 1007. ZLM的扑克牌 . 其实我在想这题的时候,还想过要不要设置求最小的排列,并且对于回文数字的话,可以把扑克牌折起来( ...
- NYOJ 333
http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...
- PKU 1007
题名:DNA排序 题意:给定字符串长度.个数,计算每个字符串的逆序数,然后从大到小排列,有兴趣的可以去看下原题. 计算字符串逆序数,然后排序,这里使用了快速排序算法,string释放的时候竟然有问题, ...
- sicily 1007. To and Fro 2016 11 02
// Problem#: 1007// Submission#: 4893204// The source code is licensed under Creative Commons Attrib ...
- NYOJ 99单词拼接(有向图的欧拉(回)路)
/* NYOJ 99单词拼接: 思路:欧拉回路或者欧拉路的搜索! 注意:是有向图的!不要当成无向图,否则在在搜索之前的判断中因为判断有无导致不必要的搜索,以致TLE! 有向图的欧拉路:abs(In[i ...
随机推荐
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- 从备考PMP到与项目经理同呼吸
前言 PMP是什么梗? 项目管理专业人士资格认证.它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证 ...
- Emoji选项列表
一.需要的前提文件 从网上下载Emoji的表情包,当然是png的图片,因为WPF不支持彩色的Emoji,所以,做列表的时候,需要用图片. 随着压缩包一起的还有一个Emoji.xml文件,文件的层级结构 ...
- 9、委托、事件、Lambda
开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.) 第 ...
- 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版
背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...
- C#调用C++代码遇到的问题总结
最近在开发服务后台的时候,使用c#调用了多个c++编写的dll,期间遇到了一系列的问题,经过一番努力最后都一一解决了,在此做个总结,方便以后参考,毕竟这些问题也都是很常见的,主要有以下问题: 类型对照 ...
- 子类继承父类时JVM报出Error:Implicit super constructor People() is undefined for default constructor. Must define an explicit constructor
当子类继承父类的时候,若父类没有定义带参的构造方法,则子类可以继承父类的默认构造方法 当父类中定义了带参的构造方法,子类必须显式的调用父类的构造方法 若此时,子类还想调用父类的默认构造方法,必须在父类 ...
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- 二次剩余、三次剩余、k次剩余
今天研究了一下这块内容...首先是板子 #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- SQL Server的AlwaysOn错误19456和41158
SQL Server的AlwaysOn错误19456和41158 最近在公司搞异地数据库容灾,使用AlwaysOn的异地节点进行数据同步,在搭建的过程中遇到了一些问题 软件版本 SQL Server2 ...