求N个数的最大公约数和最小公倍数,.已知a0,a1,b0,b1,设某未知正整数x满足: (1)x和a0的最大公约数为a1; (2)x和b0的最小公倍数为b1; 求出满足该规则x的个数

news/2024/11/17 4:25:16/

一.题目分析
题目要求:
1.求N个数的最大公约数和最小公倍数
2.已知a0,a1,b0,b1,设某未知正整数x满足:
(1)x和a0的最大公约数为a1;
(2)x和b0的最小公倍数为b1;
求出满足该规则x的个数
题目思路:
(1)求N个数的最大公约数和最小公倍数
1.先求出N个数中的最大值和最小值
2.利用穷举法求最大公约数和最小公倍数
3.利用循环求出任意一个数被N个数整除的次数以及任意一个数把N个数整除的次数
4.如果求出的次数与N值相等,那么对应的这个被整除的数就是最大公约数,整除的数就是最小公倍数
(2)求出满足的x的个数
1.从1开始循环,到一个比较大数结束
2.如果存在一个数与a0的最大公约数为a1,记下这个数为X
3,接着去验证这个x与b0的最小公倍数是否等于b1,如果等于,则这个x是满足Hankson规则,记录个数的值加
二.算法构造
1.求N个数最大公约数和最小公倍数的流程图

在这里插入图片描述

2.求出满足条件x的个数
在这里插入图片描述

三.算法实现
程序源代码:
package harkson;
import java.util.Scanner;//导包
public class Harkson {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);//创建键盘录入对象
System.out.println(“求N个数的最大公约数和最小公倍数”);
System.out.println(“请输入N的值”);
int N=sc.nextInt();//用来存储需要求最大公约数的个数
System.out.println(“请输入N个数据:”);
int data[]=new int[N];
for(int i=0;i<N;i++)
{
data[i]=sc.nextInt();
}
gcdAndLcm(data);//求最大公约数和最小公倍数的方法
System.out.println("--------------");
System.out.println(“请输入数据的组数::”);
int M=sc.nextInt();
//定义一个二维数组来存储数据,M代表数据的组数,4分别代表a0,a1,b0,b1;
int[][] array=new int[M][4];
for(int j=0;j<M;j++)
{
System.out.println(“请输入第”+(j+1)+“组数据”);
array[j][0]=sc.nextInt();//键盘录入
array[j][1]=sc.nextInt();
array[j][2]=sc.nextInt();
array[j][3]=sc.nextInt();
}
//已知x,a0的最大公约数为a1,x,b0的最小公倍数为b1;
//所以a0>=a1;b1>=b0;,
//所以利用dataValidation方法对输入数据的规范性进行验证
if(dataValidation(array,M)==1)
{
harkson(array,M);//求出满足harksO规定的x值
}

}//判断输入数据的规范性
public static int dataValidation(int array[][],int N)
{int leap=1;//判断循环是否提前结束的变量for(int j=0;j<N;j++){if(array[j][2]>array[j][3])//判断a0>=a1;b1>=b0关系式是否成立if(array[j][1]>array[j][0]){System.out.println("输入数据不符合规则");//如果不成立,则输入数据不符合规则leap=0;break;}}return leap;//利用返回值来判断harskon方法是否继续进行
}//利用harkson提出的方法,求出满足条件的x的个数
public static void harkson(int array[][],int N)
{for(int j=0;j<N;j++)//利用循环,求出每一组数据x的个数{int x=0;int ans=0;for(int i=1;i<10000;i++){if(gcd(i,array[j][0])==array[j][1]) {//gcd方法为求俩个数的最大公约数x=i;//如果x和a0的最大公约数是a1,满足第一条规则,再用这个x来验证第二条规则if(lcm(x,array[j][2])==array[j][3]) {//lcm方法为求俩个数的最小公倍数ans++;//如果x和b0的最小公倍数是b1,满足第二条规则,记录x个数的ans变量++System.out.println("x="+x);}}}System.out.println("满足x个个数为:"+ans);}}//求出俩个数的最大公约数
public static int gcd(int a,int b)
{if(a%b==0)return b;elsereturn gcd(b,a%b);//递归
}//求出俩个数的最小公倍数
public static int lcm(int a,int b)
{return a*b/gcd(a,b);//a*b除以a和b的最大公约数
}//求出N个数的最大公约数和最小公倍数
public static void gcdAndLcm(int data[])
{int max=data[0],min=data[0];for(int j=1;j<data.length;j++)//求出N个数的最大值{if(data[j]>max)max=data[j];}for(int j=1;j<data.length;j++)//求出N个数的最小值{if(data[j]<min)min=data[j];}int gcd=0;//最大公约数int m;for(int j=min;j>0;j--)//穷举法{m=0;//记录可以被j整除的数的个数for(int k=0;k<data.length;k++)if(data[k]%j==0){m++;}if(m==data.length)//可以整除j的个数与总数相等,则证明每一个数都整除j,则j为最大公约数{gcd=j;System.out.println("最大公约数为:"+gcd);break;}}//求N个数的最小公倍数的方法与求最大公约数的方法一样,使用穷举法int lcm=0;//最大公倍数for(int l=max;;l++){m=0;for(int k=0;k<data.length;k++)if(l%data[k]==0){m++;//记录能整除的个数}if(m==data.length){lcm=l;System.out.println("最大公倍数为:"+lcm);break;}}
}

}
四.调试、测试、及运行结果
调试:
一开始由于没有考虑到静态变量的关系,直接给max和min变量的初值设置成0,所以在求最大公约数的那个循环里,直接跳出了循环,没有执行这个循环

在这里插入图片描述
在这里插入图片描述

最后将max和min的初值设置成输入N数中第一个数值,就避免了该错误。
测试:
测试求N个数的最大公约数和最小公倍数

在这里插入图片描述

在这里插入图片描述

结果:
在这里插入图片描述

测试输入数据的正确性
在这里插入图片描述

结果:

在这里插入图片描述

测试求满足x的条件的个数
在这里插入图片描述
在这里插入图片描述

结果:

在这里插入图片描述

运行结果:

在这里插入图片描述

五。经验归纳
1.在写程序的时候,尽可能将一些比较长的代码放到一个方法中,使用的时候进行调用,这样所写的程序看起来不会太过繁琐。
2.写完程序以后,可以在网上看看其他人所写的程序。对比一下自己与别人的区别,总结一下各自代码的优缺点。
3.写完程序以后,及时的对一些代码进行注释,方便自己和别人理解。


http://www.ppmy.cn/news/724829.html

相关文章

BAT面试必问:a-b0与ab什么区别?overflow-conscious代码什么玩意?

BAT面试必问&#xff1a;a-b<0与a<b什么区别&#xff1f;overflow-conscious代码什么玩意&#xff1f; 读过JDK源码的同学&#xff0c;尤其是读过Collection框架的同学&#xff0c;肯定遇到过下面这种代码&#xff1a; 第一次读到这样的代码&#xff0c;你可能跟我一样感…

bne %B0的理解

查了一下书&#xff0c;0~99应该称为局部标号。 详见 ARM体系结构与编程 第147页 昨天在看arm汇编&#xff0c;其中有这样的一段语句 0 ldr r3, [r0], #4 str r3, [r1], #4 cmp r2, r0 bne %B0 bne&#xff1a;不等于则调转 但%B…

【FPGA】关于FPGA的 {width{1‘b0}} 是什么意思?

创作时间&#xff1a;2021-07-20 问题&#xff1a; {DW{1b0}}是什么意思&#xff1f;解答: 若DW8; {DW{1b0}} 就是 {8{1b0}} 也就是8b0 这下明白了吧。THE END~

YOLOv5改进之替换Backbone为EfficientNet B0

简介 BestYOLO&#xff1a;https://github.com/WangRongsheng/BestYOLO BestYOLO是一个以科研和竞赛为导向的最好的YOLO实践框架! 目前BestYOLO是一个完全基于YOLOv5 v7.0 进行改进的开源库&#xff0c;该库将始终秉持以落地应用为导向&#xff0c;以轻便化使用为宗旨&#…

EfficientNet-B0详解

文章转载来自&#xff1a;Dormineered 内容有些词汇翻译不准确&#xff0c;请见谅&#xff01;&#xff01;&#xff01;个人整理不易&#xff0c;包含参数计算内容&#xff0c;更多训练阶段细节会在后期更新。转载请注明 EfficientNets是谷歌大脑的工程师谭明星和首席科学家…

b0值

b0像是什么&#xff0c;b0像的去脑壳后的mask如何得到&#xff1f; b0像是DTI图像在扫面生成时b0是对应的图像&#xff0c;大家在拿到每个人的DTI数据时每个被试都有三个文件&#xff0c;bval文件,bvec文件和一个原始图像文件。这个图像文件可以用fslview打开&#xff0c;bval…

B0宏

在编译android平台用的ffmpeg时&#xff0c;抛出这样一个错误&#xff1a; 这句代码怎么看都找出有毛病&#xff0c;为什么B0会报错&#xff1f; 翻看aaccoder.c&#xff0c;也没有发现问题。为什么B0就成了一个常量数字&#xff0c;这里只有一个可能&#xff0c;B0在某处被宏定…

6-SIM数据交互之-B0(READ BINARY)

B0-READ BINARY B0即透明EF里面的内容binary(二进制)&#xff0c;该指令一般在C0之后执行&#xff0c;在C0返回的fcp里面可以判断到该文件下是否存在binary及binary的长度&#xff0c;如果存在即可用B0需要读的字节长度。B0里面存的内容一般比较重要&#xff0c;如我们最常用的…