博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【欧拉函数模板题】最大公约数
阅读量:5247 次
发布时间:2019-06-14

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

题目描述

对于一个给定的正整数n,研究它和其它数的最大公约数的值,可以得出许多有趣的性质。 其中一个广为人知的性质就是欧拉函数φ(n),它表示正整数1~n中与n的最大公约数的值是1的数的个数。
当然,正整数n与正整数1~n的最大公约数并不只会是1, 还可以是其它的数。本题中,你的任务就是找出所有可能的最大公约数的值,并统计正整数1~n中与n的最大公约数是这个值的数有多少个。

 

输入

输入包括一行一个正整数n。

 

输出

输出若干行,每行两个正整数m, x,表示正整数1~n中,有x个数和n的最大公约数为m。
对于每行的mi, xi,你需要保证xi>0,且mi按升序顺序输出。
#include 
#define ll long longusing namespace std;ll n;struct node{ ll x; ll p; bool operator<(const node&c)const { return x>c.x; }} now;priority_queue
pi;ll phi(ll x){ ll ret=x; for (ll i=2;i*i<=x;++i) { if (x%i==0) { ret-=ret/i; while(x%i==0) x/=i; } } if(x>1) { ret-=ret/x; } return ret;} int main(){ scanf("%lld",&n); for(ll i=1;i*i<=n;++i) { if(n%i==0) { now.x=n/i; now.p=phi(i); pi.push(now); if(i*i!=n) { now.x=i; now.p=phi(n/i); pi.push(now); } } } while(!pi.empty()) { now=pi.top(); printf("%lld %lld\n",now.x,now.p); pi.pop(); } return 0;}

 

转载于:https://www.cnblogs.com/Diliiiii/p/10284672.html

你可能感兴趣的文章
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
BNU29140——Taiko taiko——————【概率题、规律题】
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
CentOS 简单命令
查看>>
使用&nbsp;SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>