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 ...
随机推荐
- 理解js中this的指向
学习自原文 http://www.cnblogs.com/pssp/p/5216085.html后的一点小结(原文作者总结的很棒^_^)! 关于js中this的指向,在函数定义的时候还无法 ...
- 最简单的Android教程之自定义控件
新建title.xml,完成布局 新建一个TitleLayout继承 LinearLayout. activity_main.xml中引用 Run your applicaiton , and try ...
- bug-android之INSTALL_FAILED_NO_MATCHING_ABIS
bug描述: 经常在网络上下载一些实例,自己研究 ,运行时不时会出现这个bug: Installation error: INSTALL_FAILED_NO_MATCHING_ABIS bug解决方案 ...
- BestCoder Round #61 1002 Game
Problem Description XY is playing a game:there are N pillar in a row,which numbered from 1 to n.Each ...
- 18 TaskScheduler任务调度器抽象基类——Live555源码阅读(一)任务调度相关类
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...
- Apache Thrift 服务开发框架学习记录
Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架. 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Servic ...
- Objective C 快速入门学习一
Objective-C程序设计 1. 直接用Xcode作为IDE,舍弃gcc编译方面的学习.2. 入门例子:Eg:打印Hello World 控制台程序 #import<Foundation/F ...
- C#中 int.TryParse 的用法
int i = -1;bool b = int.TryParse(null, out i);执行完毕后,b等于false,i等于0,而不是等于-1,切记. int i = -1;bool b = in ...
- WPF三大模板简介
WPF支持以下类型的模板: (1) 控件模板.控件模板可以将自定义模板应用到某一特定类型的所有控件,或是控件的某一实例.决定控件外观的是ControlTemplate,它决定了控件“长成什么样子”,因 ...
- FFmpeg 官方 20160227 之后 追加 libmfx 无法在 xp 上运行的解决方法
修改三个地方 _wfopen_s _wfopen strncpy_s strncpy swscanf_s swscanf 下载 fixffmpeg.7z, fixff.cmd FixFFmpeg.ex ...