题目描述 Description
给出n和n个整数,希望你从小到大给他们排序 输入描述 Input Description
第一行一个正整数n 第二行n个用空格隔开的整数 输出描述 Output Description
输出仅一行,从小到大输出n个用空格隔开的整数 样例输入 Sample Input
3 3 1 2 样例输出 Sample Output
1 2 3 数据范围及提示 Data Size & Hint
1<=n<=100000

首先要知道:最大公约数*最小公倍数=A×B;

代码如下:

#include<stdio.h>
#include<math.h>
int gcd(int x,int y)//找x,y的最大公约数
{
return (x%y==0?y:gcd(y,x%y));
}
int main()
{
int x,y;
while(~scanf("%d%d",&x,&y))
{
int p,q,cnt = 0,i;
for(i=1;i<10000;i++)
{
/*p和q的最大公约数(gcd)是x,最小公倍数(lcm)是y.那么p*q=x*y ,*/
if( (y*x)%i == 0 )/*如果,i能被y*x整除,则判断(y*x/i)和i的最大公约数是不是x*/
{
if(gcd(y*x/i,i) == x)
cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}

总觉得上面的代码容易理解一些,下面是大神的代码。

分析:

p和q的最大公约数(gcd)是x,最小公倍数(lcm)是y

那么p*q=x*y

设p=x*i,q=x*j,i和j互质

则p*q=(x*i)*(x*j)=x*y,那就有i*j=y/x

我们可以枚举i,从i=1开始,直到i*i>y/x

如果i是y/x的因子

然后j=(y/x)/i

再判断i和j是否互质

因为每次得到的两个数中比较小的就是i,比较大的数是j,i是小于根号(y/x)的,j就是大于根号(y/x)因此不会重复计算,那算到一次,答案就累加2。

#include<iostream>
using namespace std; int gcd(int x,int y)
{
return(x%y==0?y:gcd(y,x%y));
}
int main()
{
int x,y,ans=0;
cin>>x>>y;
if(y%x){
cout<<0;
return 0;
}
y=y/x;
for(int i=1; i*i<=y; i++)
{
if(y%i==0&&gcd(i,y/i)==1)
ans+=2;
}
cout<<ans<<endl;
}

上面的那个分析,主要是为了得到代码中那个循环的条件,还有大神的这个GCD(),一句话明了。

我的gcd()是这个样子的:

int gcd(int a,int b)//欧几里得 求最大公约数
{
if(a<b)
{
int t=a;
a=b;
b=t;
}
if(b==0) return a;
else return gcd(b,a%b);
}

哎,总是自愧不如啊

codevs 1012的更多相关文章

  1. (数论 最大公约数 最小公倍数) codeVs 1012 最大公约数和最小公倍数问题

    题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件:  1.P,Q是正整 ...

  2. 【数论】【最大公约数】【枚举约数】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))地 ...

  3. codevs 1012 最大公约数和最小公倍数问题

    题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件:  1.P,Q是正整 ...

  4. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  5. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

随机推荐

  1. hibernate中1对1的注解配置

    hibernate中1对1的注解配置分为:外键关联映射和主键关联映射 1.外键配置 //一方@Entity@Table(name="test_classinfo")public c ...

  2. Spark数据类型SparseMatrix 解释

    http://blog.csdn.net/sinat_29508201/article/details/54089771 parseMatrix Spark的mllib包中提供了机器学习的两种基本数据 ...

  3. GBDT 将子树结果当成lr输出

    http://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html#example-ensem ...

  4. Hadoop 初始化系统

    hadoop namenode -format 或者 hdfs namenode -format 2.执行hadoop sbin 目录下的 start-dfs.sh start-yarn.sh3.查看 ...

  5. Mysql 中json 相关函数的使用

    1.JSON_LENGTH: select content from test1 ["1","2","3","4",&q ...

  6. EasyUI多选的获取

    function deletePRE() { var rows = $('#dg').datagrid('getSelections'); var ids = []; var other_ids = ...

  7. 关于number...的精度问题

    一 当数字的精度被定为number(3,2)时, 这时他能输入的数字整数部分只能是3-2=1位, 小数位如果不够会用0补齐, 超出的四舍五入保留3位小数. SQL> insert into t_ ...

  8. Dell 服务器安装方法介绍

    大家都知道dell服务器在安装windows系统时都需要有raid卡驱动的加载才可以人道服务器硬盘,下面来介绍一下dell服务器raid卡驱动的加载和系统的安装: 方法一: 使用dell服务器自带的 ...

  9. 虚拟机安装Centos6.5服务器系统

    前言: 工作需要,研究Linux数日,写下此教程,意在给其他初学者参考学习,亦是给自己留作备用.好记性不如烂笔头,毕竟只是偶尔使用,留下教程,以备不时之需. 对于学习研究Linux的新手,个人推荐VM ...

  10. Window 编码 UTF-8 BOM 说明

    UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM.所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一 ...