博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2588 GCD
阅读量:4677 次
发布时间:2019-06-09

本文共 958 字,大约阅读时间需要 3 分钟。

题目梗概

T组数据,每组数据输入n,m,问有多少个x满足1<=X<=N 和 gcd (X,N)>=M

 

思考

我们假设S= gcd(X,N) 

那么一定存在a,b使得X=Sa N=Sb  且gcd(a,b)=1

因为 X<=N 即 Sa<=Sb 所以 a<=b 

求X的个数即是求a的个数

求a的个数即是求  b的欧拉函数(比b小且与b互质的数的个数)

但是如果 直接枚举s来计算b 一定会TLE,所以我们需要再深入思考。

我们发现枚举S从1-N有一半的次数是浪费掉的,举个例子 N=8 我枚举S为2 计算b=4 到后面我枚举S为2 计算b=2。

所以在S!=b的情况下 我们只需要枚举计算S的同时,再计算一下b.

 

#include 
#include
using namespace std;typedef long long ll;ll Euler(ll n){ ll res = n; for(ll i = 2; i*i <= n;i++){ if(n%i==0) res = res/i*(i-1); while(n%i==0) n/=i; } if(n>1) res = res / n * (n-1); return res;}int main(){ ll T,n,m,ans; scanf("%lld",&T); while(T--){ ans=0; scanf("%lld%lld",&n,&m); for(int i=1;i*i<=n;i++){ if(n%i==0){ if(i>=m) ans += Euler(n/i); if(i*i!=n && n/i>=m) ans+=Euler(i); } } printf("%lld\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/OIerLYF/p/7502411.html

你可能感兴趣的文章
HTML属性的应用
查看>>
HEAP CORRUPTION DETECTED
查看>>
Android URI简单介绍
查看>>
蒙板 模态对话框
查看>>
pythong中的全局变量的调用和嵌套函数中变量的使用
查看>>
【POJ - 3009】Curling 2.0 (dfs+回溯)
查看>>
Windows下载安装良心教程
查看>>
浅析商业银行“业务连续性管理体系”的构建
查看>>
【分享】从《水浒传》中反思什么是真正的执行力
查看>>
java中的static
查看>>
5.侧边栏逻辑
查看>>
评论博客
查看>>
用户代理字符串识别工具源码与slf4j日志使用
查看>>
算法导论第6部分图算法,第22章图的基本算法
查看>>
提示框第三方库之MBProgressHUD
查看>>
C语言 10-字符和字符串常用处理函数
查看>>
C++ 表达式语句 海伦的故事
查看>>
32位汇编学习笔记(1)
查看>>
day_01
查看>>
2013年12月日本語能力試験N3聴解部分
查看>>