【wikioi】1012 最大公约数和最小公倍数问题
算法:辗转相除(欧几里得)
gcd(a, b)是a和b最小公倍数, lcm(a, b)是a和b的最大公倍数
gcd(a, b) == gcd(b, a%b)
时间复杂度: O(lgb)
具体证明很多的,百度即可。
代码:
int gcd(int a, int b){return (b?gcd(b, a%b):a);}
(非递归版自己推)
lcm(a, b) = a*b/gcd(a, b)
这里要注意个细节优化,在程序中应该防止溢出,即要写成
lcm(a, b) = a/gcd(a, b)*b
时间复杂度:O(lgb)
代码:
inline int lcm(int a, int b){return a / gcd(a, b) * b;}
好了到此题:【wikioi】1012
14.01.02 PS: 这是之前的代码,有点不简洁。
一般枚举算法
//暴力枚举即可
//只不过gcd(a, b) == gcd(b, a%b); lcm(a, b) == a/gcd(a, b)*b;
#include <iostream>
using namespace std; int mymin, mymax;
void gcd(const int &a, const int &b){if(a%b==0) mymin=b; else gcd(b, a%b);}
inline int lcm(const int &a, const int &b){return (a/mymin)*b;} int main()
{
int tmin, tmax;
cin >> tmin >> tmax;
int ans = 0;
for(int i = tmin; i <= tmax; i++)
{
if(i % tmin != 0 || tmax % i != 0) continue;
for(int j = tmin; j <= tmax; j++)
{
if(j % tmin != 0 || i * j < tmax || tmax % j != 0) continue;
gcd(i,j);
if(mymin != tmin) continue;
mymax = lcm(i, j);
if(mymax != tmax) continue;
ans++;
}
}
cout << ans << endl;
return 0;
}
【wikioi】1012 最大公约数和最小公倍数问题的更多相关文章
- wikioi 1012最大公约数和最小公倍数【根据最大公约数和最小公倍数求原来的两个数a、b】
/*====================================================================== 题目描述 输入二个正整数x0,y0(2<=x0& ...
- 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组
1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 输入二个 ...
- codevs 1012 最大公约数和最小公倍数问题
题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件: 1.P,Q是正整 ...
- (数论 最大公约数 最小公倍数) codeVs 1012 最大公约数和最小公倍数问题
题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件: 1.P,Q是正整 ...
- 【数论】【最大公约数】【枚举约数】CODEVS 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组
对于一对数(p,q),若它们的gcd为x0,lcm为y0, 则:p*q/x0=y0,即q=x0*y0/p, 由于p.q是正整数,所以p.q都必须是x0*y0的约数. 所以O(sqrt(x0*y0))地 ...
- 求N个数的最大公约数和最小公倍数(转)
除了分解质因数,还有另一种适用于求几个较小数的最大公约数.最小公倍数的方法 下面是数学证明及算法实现 令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表 ...
- Java程序设计之最大公约数和最小公倍数
题目:输入两个正整数number1和number2,求其最大公约数和最小公倍数. 算法:较大数和较小数取余,较小数除余数,一直到余数为0时,为最大公约数(辗转相除法):最大公倍数numbe1*numb ...
- 辗转相除法求最大公约数和最小公倍数【gcd】
要求最小公倍数可先求出最大公约数 设要求两个数a,b的最大公约数 伪代码: int yushu,a,b: while(b不等于0) { yushu=a对b求余 b的值赋给a yushu的值赋给b } ...
- PAT - 基础 - 最大公约数和最小公倍数
题目: 本题要求两个给定正整数的最大公约数和最小公倍数. 输入格式: 输入在一行中给出2个正整数M和N(<=1000). 输出格式: 在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1 ...
随机推荐
- PHPNG (next generation)
PHPNG (next generation) This page gives short information about development state of a new PHP branc ...
- 同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)
试想一下,前面做的实验和例子都只有一个spider.然而,现实的开发的爬虫肯定不止一个.既然这样,那么就会有如下几个问题:1.在同一个项目中怎么创建多个爬虫的呢?2.多个爬虫的时候是怎么将他们运行起来 ...
- Django中如何查找模板
参考:http://my.oschina.net/zuoan001/blog/188782 Django的setting中有关找模板的配置有如下两个: TEMPLATE_LOADERS TEMPLAT ...
- MySQL数据库备份和还原的常用命令
其实很多情况下mysql备份就是采用了这些命令,例如: mysql导入和导出数据 linux自动定时备份web程序和mysql数据库 备份MySQL数据库的命令 mysqldump -hhostnam ...
- Java for LeetCode 149 Max Points on a Line
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...
- intellij 提交代码到git
.配置git .create git repository .git-->add commit Directory .提交代码 git remote add origin https://git ...
- python基础——使用dict和set
python基础——使用dict和set dict Python内置了字典:dict的支持,dict全称dictionary,在其它语言中也称为map(映射),使用键-值(key-value)存储,具 ...
- Log4Net异常日志记录在asp.net mvc3.0的应用(转载)
这篇博客写的很好:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html 前言 log4net是.Net下一个非常优秀的开源 ...
- 添加网页ico
<link rel="Shortcut Icon" href="/favicon.ico" />
- 抓包工具Fiddler的使用
Fiddler 教程 Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发 ...