小学奥数 最大公约数与最小公倍数

依然要用到均值不等式的知识,证明在这里:http://www.cnblogs.com/xtx1999/p/4913067.html

因为知道了两个数的最大公约数和最小公倍数,于是就知道了两个数的乘积。根据均值不等式,两个数和一定两数和一定,它们两个越接近乘积越大。所以乘积一定时,它们越接近和就越小所以枚举即可。

#include<iostream>
#include<cstdio>
using namespace std;
int gcd,lcm,a,b,tot,ans=10000000;
inline int Gcd(int x,int y)
{
    return y==0?x:Gcd(y,x%y);
}
int main()
{
    scanf("%d%d",&gcd,&lcm);
    tot=gcd*lcm;
    for(int i=1;i*i<=tot;i++)
      if(tot%i==0&&Gcd(i,tot/i)==gcd)
          ans=min(ans,i+tot/i);
    cout<<ans;
}

时间: 2024-10-17 11:51:14

小学奥数 最大公约数与最小公倍数的相关文章

poj 小学奥数专题

link 7656:李白的酒 找规律: n==1 2x-1=0; n==2 2(2x-1)-1=0;----->4x-3=0; n==3 2(2(2x-1)-1)-1=0--->8x-7=0; ... 答案为\(\frac{2^n-1}{2^n}\) 注意到n<=100,答案保留5位小数,可是\(2^{100}\)显然爆long long了,此时我们机智的使用计算器,发现在n>=18的时候答案就已经被四舍五入到1.00000了,特判即可. upd:您发现n<=100,那直接一

吐槽小学奥数

前几天有幸到一家从事小学奥数培训的辅导班当老师,刚去当天辅导小学四年级奥数,看到两个题就吓尿了,尿完之后发现,原来这俩题我会呀. 题目一:210!最后结果有几个零. 如果你之前没有在编程之美等书上看到过这道题,如果你不是数学怪物,我想百分之80的人对这道题都会素手无策,好在我曾在编程之美看到过此题,因此很利索的搞定了. 结果末尾有多少个0的问题可以转换为N!乘式中可以分解出多少个5的问题.因为5和其前面的任何一个偶数相乘都会产生0,所以只需求出在由1到N的数中共可以分解出多少个5.例如25!,可

SDUT 2867 小学奥数(下)(规律)

小学奥数(下) Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 到了夏天了,ACM协会发福利了,发了很多西瓜,聪明的小明很爱思考,一个西瓜, n刀最多能切成几部分? 你能帮他解决么? 输入 多组输入,每组一行,直到文件结束.输入一个n(0≤n≤100). 输出 对于每一组输入,输出单个数字,n刀可以把西瓜切成几部分. 示例输入 1 2 3 示例输出 2 4 8 提示 来源 示例程序 #include<iostream> #i

小学奥数学习方法

小学奥数学习方法 小学奥数,当以培养自学能力为主,以数图合一的方法为辅.在方程上进行拓展,为初中的数学学习打下扎实基础.具体见以下几方面. 一.选择奥数教材.选择第几册.奥数教材,当以考察梯度均衡为主.我们选择的是<小学奥数读本>.一般N年级的学生,选择N-1年级的奥数书.这只是一般的选择方法.具体以学生为主,通过浏览相近几册的难易度,来选择适合自己的.太难,效率反而不会高,还会使兴趣受挫.太易,也没有那个必要. 二.看例题方法.要想从例题中学习到更多,一个是要做例题.另一个是要学会总结归纳.

小学奥数 回文数个数

这道题,是自己手算然后发现规律最后打表,AC的.规律如下: 对于一位数,有九种情况,两位数也有九种情况.然后三位数可以视为中间一位数在变化(10种情况,有0,注意),两边是九种.乘法原理9*10=90种.四位数是最外面的数有9种,中间的两位和三位数的中间的一位相同.所以依然是90中,五位数分为三部分,最外面9种,中间两个10种,最里面10中:9*10*10=900种,六位数和五位数同理,其他的依然同理..... #include<iostream> #include<cstdio>

小学奥数 李白的酒

直接模拟即可 加1 乘2 加1 乘2 .... 循环n次 #include<iostream> #include<cstdio> using namespace std; int n; double ans; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) ans+=1,ans/=2; printf("%.5f",ans); }

小学奥数 余数相同问题

水题,直接暴力搜索: #include<iostream> #include<cstdio> using namespace std; int a,b,c; int main() { scanf("%d%d%d",&a,&b,&c); for(int i=2;i<=min(a,min(b,c));i++){ if(a%i==b%i&&b%i==c%i){ printf("%d",i); retur

小学奥数 不定方程求解

法1:是枚举x和y然后判断是否相等(n^2) 法2:枚举x然后根据方程计算y,如果是整数,直接输出.因为需要把”by”移项,所以 b=-b. #include<iostream> #include<cstdio> using namespace std; int ans,a,b,c; int main() { scanf("%d%d%d",&a,&b,&c); b=-b; for(int i=0;i<=1000;i++){ int

小学奥数 自来水供给

首先明确,至少有一个粗管子,要不然错,题目描述错误....然后对输入进行解释,给出的距离是第i个村子和第i-1个村子的距离.暴力枚举每个村子即可 #include<iostream> #include<cstdio> int n,a[110],ans=100000000; using namespace std; int main() { scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d&q