GCD

题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数。  (文末有题)

知识点:   欧拉函数。http://www.cnblogs.com/shentr/p/5317442.html

题解一:

当M==1时,显然答案为N。

当M!=1。  X是N的因子的倍数是 gcd(X,N)>1 && X<=N 的充要条件。so  先把N素因子分解,

N=          (e1,e2,…en 从0~ei的全排列包含了所有N的因子。)(可能表达不清,看下面。。)

()中内容相当于:

for(int i=0;i<e1;i++)

for(int j=0;j<e2;j++)

for(int k=0;k<en;k++)

x=p1^i*p2^j…pn^k

用dfs解决这个问题,得到所有N的因子。

假设N=p*d,X=q*d.若n与x的最大公约数为d,则能够推出p与q肯定是互质的,因为X<=N所以要求的就是p的欧拉函数值了,那么我们就转化成求满足:N=p*d,并且d>=N的p的欧拉函数值之和了。

如果dfs不是用的很溜的看解法二。

//解法1:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=1e5; bool vis[N];
int prime[N],cnt;
void is_prime()
{
cnt=0;
memset(vis,0,sizeof(vis));
for(int i=2; i<N; i++)
{
if(!vis[i])
{
prime[cnt++]=i;
for(int j=i+i; j<N; j+=i)
vis[j]=1;
}
}
} int e[100],p[100],cnt2=0;
void fenjie(int n)
{
cnt2=0;
memset(e,0,sizeof(e));
for(int i=0; i<cnt&&prime[i]<=n; i++)
{
if(n%prime[i]==0)
{
p[cnt2]=prime[i];
e[cnt2]++;
n/=prime[i];
while(n%prime[i]==0)
{
n/=prime[i];
e[cnt2]++;
}
cnt2++;
}
}
} int Euler(int n)
{
int ans=n;
for(int i=0; i<cnt&&prime[i]<=n; i++)
{
if(n%prime[i]==0)
{
ans=ans-ans/prime[i];
while(n%prime[i]==0)
n/=prime[i];
}
}
if(n==1)
return ans;
if(n>1)
return ans-ans/n; } LL dfsans[N],cnt3=0;
void dfs(int cur,LL x)
{
if(cur==cnt2)
{
dfsans[cnt3++]=x;
return;
}
for(int i=0;i<=e[cur];i++)
{
LL ans=1;
for(int j=0;j<i;j++)
ans*=p[cur];
dfs(cur+1,x*ans);
}
} int main()
{
int t;
cin>>t;
is_prime();
while(t--)
{
LL n,m;
cin>>n>>m;
fenjie(n);
LL ans=0; cnt3=0;
dfs(0,1);
for(int i=0;i<cnt3;i++)
{
//cout<<dfsans[i]<<endl;
if(dfsans[i]>=m)
ans+=Euler(n/dfsans[i]);
}
cout<<ans<<endl;
}
}

题解二:

只是把dfs换了,其他思路和上面一样。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=1e5; bool vis[N];
int prime[N],cnt;
void is_prime()
{
cnt=0;
memset(vis,0,sizeof(vis));
for(int i=2;i<N;i++)
{
if(!vis[i])
{
prime[cnt++]=i;
for(int j=i+i;j<N;j+=i)
vis[j]=1;
}
}
} int e[100],p[100],cnt2=0;
void fenjie(int n)
{
cnt2=0;
memset(e,0,sizeof(e));
for(int i=0;i<cnt&&prime[i]<=n;i++)
{
if(n%prime[i]==0)
{
p[cnt2]=prime[i];
e[cnt2]++;
n/=prime[i];
while(n%prime[i]==0)
{
n/=prime[i];
e[cnt2]++;
}
cnt2++;
}
}
} int Euler(int n)
{
int ans=n;
for(int i=0;i<cnt&&prime[i]<=n;i++)
{
if(n%prime[i]==0)
{
ans=ans-ans/prime[i];
while(n%prime[i]==0)
n/=prime[i];
}
}
if(n==1)
return ans;
if(n>1)
return ans-ans/n; } /*LL dfsans[N],cnt3=0;
void dfs(int cur,LL x){ if(cur==cnt2) { dfsans[cnt3++]=x; return; } for(int i=0;i<=e[cur];i++) { LL ans=1; for(int j=0;j<i;j++) ans*=p[cur]; dfs(cur+1,x*ans); } } */ int main()
{
int t;
cin>>t;
is_prime();
while(t--)
{
LL n,m;
cin>>n>>m;
fenjie(n);
LL ans=0;
/*for(int i=0;i<N;i++)
dfsans[i]=1;
cnt3=0;
dfs(0);
for(int i=0;i<cnt3;i++)
{
cout<<dfsans[i]<<endl;
if(dfsans[i]>=m)
ans+=Euler(n/dfsans[i]);
}*/
for(int i=1;i*i<=n;i++)
{
if(n%i==0)
{
if(i>=m)
ans+=Euler(n/i);
if((n/i!=i)&&(n/i>=m))
ans+=Euler(i);
}
}
cout<<ans<<endl;
}
}

GCD

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the largest divisor common to a and b,For example,(1,2)=1,(12,18)=6.
(a,b) can be easily found by the Euclidean algorithm. Now Carp is considering a little more difficult problem:
Given integers N and M, how many integer X satisfies 1<=X<=N and (X,N)>=M.

Input

The first line of input is an integer T(T<=100) representing the number of test cases. The following T lines each contains two numbers N and M (2<=N<=1000000000, 1<=M<=N), representing a test case.

Output

For each test case,output the answer on a single line.

Sample Input


3
1 1
10 2
10000 72

Sample Output


1
6
260

hdu2588 GCD (欧拉函数)的更多相关文章

  1. hdu2588 gcd 欧拉函数

    GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  3. POJ 2773 Happy 2006【GCD/欧拉函数】

    根据欧几里德算法,gcd(a,b)=gcd(a+b*t,b) 如果a和b互质,则a+b*t和b也互质,即与a互质的数对a取模具有周期性. 所以只要求出小于n且与n互质的元素即可. #include&l ...

  4. HDU 2588 GCD (欧拉函数)

    GCD Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status De ...

  5. Bzoj-2818 Gcd 欧拉函数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x ...

  6. BZOJ2818: Gcd 欧拉函数求前缀和

    给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 如果两个数的x,y最大公约数是z,那么x/z,y/z一定是互质的 然后找到所有的素数,然后用欧拉函数求一 ...

  7. HDU 1695 GCD 欧拉函数+容斥定理

    输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1 由于gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和 ...

  8. HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. HDU 1695 GCD (欧拉函数,容斥原理)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  10. hdu 1695 GCD (欧拉函数+容斥原理)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

随机推荐

  1. 【原】SDWebImage源码阅读(四)

    [原]SDWebImage源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 SDWebImage中主要实现了NSURLConnectionDataDelega ...

  2. ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器

    一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...

  3. JS / Egret 单笔手写识别、手势识别

    UnistrokeRecognizer 单笔手写识别.手势识别 UnistrokeRecognizer : https://github.com/RichLiu1023/UnistrokeRecogn ...

  4. H5图片裁剪升级版

    前段时间做了个跟裁剪相关的活动<用H5中的Canvas等技术制作海报>,这次公司要做个与奥运相关的活动,扫车牌赢奖. 于是我就在上一个活动的基础上,将代码重新封装一下,并且将计算方式写的更 ...

  5. 2016网易春招Java在线笔试回忆录

    别看是在线笔试,但是非常严格,全称窗口不得最小化和关闭,转移,全称需要打开摄像头监控,使用草稿纸需要摄像头对准……反正2个小时,题量在那儿摆着,有作弊的功夫不如好好做做最后的编程题呢……网易不让泄漏原 ...

  6. Vertica DBD 分析优化设计

    DBD = Database Designer,是Vertica数据库优化中最主要的原生工具. 首先运行admintools工具,按下面步骤依次执行: 1.选择"6 Configuratio ...

  7. Sass学习笔记之入门篇

    Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样 ...

  8. 自己动手,实现一种类似List<T>的数据结构(二)

    前言: 首先,小匹夫要祝各位看官圣诞快乐,新年愉快-.上一篇文章<自己动手,实现一种类似List<T>的数据结构(一)> 介绍了一下不依靠List<T>实现的各种接 ...

  9. Windows Phone Toolkit 的 DatePicker 控件本地化的问题

    用到 The Windows Phone Toolkit 里的 DatePicker 控件,但是多语言的时候出现了问题: 手机设置为中文,虽然月份跟星期有效,但是 Title 却还是默认的语言:CHO ...

  10. 注意 AppResLib.dll.*.mui 的生成操作应该为 Content

    为 Windows Phone 8 App 添加本地化的时候,发现修改 AppResLib.dll.*.mui 后不仅没有其变化,还发现修改它导致它失效.通过对比代码发现,问题原因是 AppResLi ...