nyoj1007(euler 函数)
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;
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1007
题意:给出n和m,求满足条件gcd(x, n)>=m的x的x的和,其中1<=x<=n,1<= n, m <= 1e9;
思路:对于任意的x和n,有:x=a*q;
n=b*q;
其中q=gcd(x, n),所以gcd(a, b)=1;
所以对于本题,我们可以枚举符合条件的q, 对于每个q对应的b,euler(b)即为所有符合条件的a的数目;
不过本题要求我们求所有符合条件的x的和,sum(b)是所有符合条件的a的和,x=a*q;对于每个符合条件的q对应的x的和,我们用solve(b)表示;
那么solve(b)=q*sum(b),累加所有符合条件的q下的solve(b)即为本题答案;
代码:
#include <bits/stdc++.h>
#define ll long long
#define mod 1000000007
#define MAXN 100000
using namespace std; ll euler(ll x){
if(x<){
return ;
}
int ans=;
for(int i=; i*i<=x; i++){
if(x%i==){
ans*=i-;
x/=i;
}
while(x%i==){
x/=i;
ans*=i;
}
}
if(x>){
ans*=x-;
}
return ans;
} ll solve(ll x){
if(x==){
return ;
}else{
return euler(x)*x/;
}
} int main(void){
ios::sync_with_stdio(false), cin.tie(), cout.tie();
int t;
cin >> t;
while(t--){
ll n, m, ans=;
cin >> n >> m;
for(int i=; i*i<=n; i++){
if(n%i==){
if(i>=m){
ll cnt=n/i;
ans+=(i*solve(cnt))%mod;
}
if(i*i!=n&&n/i>=m){
ll cnt=i;
ans+=(n/cnt*solve(i))%mod;
}
}
}
cout << (ans%mod+mod)%mod << endl;
}
return ;
}
nyoj1007(euler 函数)的更多相关文章
- 2021.08.10 Euler函数总结
2021.08.10 Euler函数总结 知识: 记 φ(n) 表示在 [1,n] 中与 n互质的数的个数. 1.p为质数,则 \[φ(p^l)=p^l-p=p^{l-1}(p-1) \] 注:每p个 ...
- hdu-2865-polya+dp+矩阵+euler函数
Birthday Toy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- poj-2154-polya+euler函数
Color Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11758 Accepted: 3783 Descriptio ...
- 51Nod 1136 欧拉函数 Label:数论
对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi( ...
- HDOJ 1787 GCD Again(欧拉函数)
GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- BZOJ2818 与 BZOJ2301【euler,线性筛,莫比乌斯】
题目大意: 给一个范围[1,n],从中找出两个数x,y,使得gcd(x,y)为质数,问有多少对(x,y有序) 解法: 不难,欧拉函数练手题,可以定义集合P ={x|x为素数},那么我们枚举gcd(x, ...
- POJ2407-Relatives-欧拉函数
欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. 对于一个正整数N的素数幂分解N=P1^q1*P2^q2*...*Pn^qn. Euler函数表达通式:euler(x)=x(1 ...
- Matlab:显(隐)式Euler和Richardson外推法变步长求解刚性问题
一.显示Euler 函数文件:Euler.m function f=Euler(h,Y) f(1,1)=Y(1)+h*(0.01-(1+(Y(1)+1000)*(Y(1)+1))*(0.01+Y(1) ...
- POJ 2407.Relatives-欧拉函数O(sqrt(n))
欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. 对于一个正整数N的素数幂分解N=P1^q1*P2^q2*...*Pn^qn. Euler函数表达通式:euler(x)=x(1 ...
随机推荐
- 从程序员到CTO的Java技术路线图
转自:http://zz563143188.iteye.com/blog/1877266 企业级项目实战地址:http://zz563143188.iteye.com/blog/1825168 开发资 ...
- Triangle leetcode
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- 学习ios(必看经典)牛人40天精通iOS开发的学习方法
学习ios(必看经典)牛人40天精通iOS开发的学习方法 描述 这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统.专业的课程体系.以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲 ...
- Java序列化技术与Protobuff
http://www.cnblogs.com/fangfan/p/4094175.html http://www.cnblogs.com/fangfan/p/4094175.html 前言: Java ...
- 面向对象的 CSS (OOCSS)
原文链接:来自smashing magazine 译文 你是否听说过一个词语叫“内容就是王道”?作为一个 Web 开发者,我们的工作与内容创作有着频繁的联系.这是一条经常被引用,并且正确地解释了什么因 ...
- Unity3D绑定button监听事件
一.可视化创建及事件绑定 第一步:通过Hierarchy面板创建button,如图 第二步:创建一个脚本名为TestClick,并定义一个名为Click的public方法 ? 1 2 3 4 5 6 ...
- 如何发布及部署asp.net网站
用vs开发完asp.net网站之后如何发布到服务器上去变成正式网站? 1.发布首先需要发布网站,这个步骤就是生成正式网站的目录(把源代码编译成.cs代码文件编译成.dll文件)详细步骤:http:// ...
- python to be Windows Daemon
参考:http://assback.iteye.com/blog/1731565 安装 pywin32-.win32-py2..exe #32bit pywin32-.win-amd64-py2..e ...
- spring的对象属性相同(类型,名字)拷贝
A类: package test; /** * Created by gmq on 2015/12/4. */ public class A { private String aa; private ...
- ACM/ICPC 之 四道MST-Prim解法(POJ1258-POJ1751-POJ2349-POJ3026)
四道MST,适合Prim解法,也可以作为MST练习题. 题意包括在代码中. POJ1258-Agri Net 水题 //Prim-没什么好说的 //接受一个邻接矩阵,求MST //Time:0Ms M ...