java求n个整数的最大公约数
JAVA编程实例大全及详解答案(50例)

JA V A编程实例大全及详解答案(50例)【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?//这是一个菲波拉契数列问题public class lianxi01 {public static void main(String[] args) {System.out.println("第1个月的兔子对数: 1");System.out.println("第2个月的兔子对数: 1");int f1 = 1, f2 = 1, f, M=24;for(int i=3; i<=M; i++) {f = f2;f2 = f1 + f2;f1 = f;System.out.println("第" + i +"个月的兔子对数: "+f2);}}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
public class lianxi02 {public static void main(String[] args) {int count = 0;for(int i=101; i<200; i+=2) {boolean b = false;for(int j=2; j<=Math.sqrt(i); j++){if(i % j == 0) { b = false; break; }else { b = true; }}if(b == true) {count ++;System.out.println(i );}}System.out.println( "素数个数是: " + count);}}【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
最大公约数和最小公倍数Java源程序

//求长整型数a和长整型数b的最大公约数和最小公倍数,Test类为主类class GreatestCommonDivisor //求长整型数a和长整型数b的最大公约数,同时输出a和b的所有约数{private long a;private long b;private Divisor aDivisor;private Divisor bDivisor;GreatestCommonDivisor(){a = 1;b = 1;aDivisor = new Divisor();bDivisor = new Divisor();}GreatestCommonDivisor(long a,long b){this.a = a;this.b = b;aDivisor = new Divisor(a);bDivisor = new Divisor(b);}public void setA(long a){this.a = a;}public long getA(){return a;}public void setB(long b){this.b = b;}public long getB(){return b;}public void setADivisor(Divisor aDivisor){this.aDivisor = aDivisor;}public Divisor getADivisor(){return aDivisor;}public void setBDivisor(Divisor bDivisor){this.bDivisor = bDivisor;}public Divisor getBDivisor(){return bDivisor;}/** 直接求两个数a和b的最大公约数,用较大数依次除以较小数的所有约数,其中最大的约数即为最大公约数* 即用较小数的所有约数,包括较小数本身,按照从大到小的顺序依次去除较大数* 第一个能把较大数除尽的数就是最大公约数public long getGreatestCommonDivisor(){long result = 1;long n = 0;if(a==0){result = b;}else if(b==0){result = a;}else{long absA = 1;long absB = 1;long littleNumber = 1;long bigNumber = 1;absA = Math.abs(a);absB = Math.abs(b);if(absA<absB){littleNumber = absA;bigNumber = absB;}else{littleNumber = absB;bigNumber = absA;//System.out.println("littleNumber=" + littleNumber);//System.out.println("bigNumber=" + bigNumber);long i = littleNumber;while(i>1){if(bigNumber%i==0){break;}else{do{i--;}while(littleNumber%i!=0);if(bigNumber%i==0){break;}}}if(a<0 && b<0){result = -i;}else if(a>0 && b>0){result = i;}else{result = 1;}}return result;}*/public long getGreatestCommonDivisor(){long result = 1;if(getA()==0){if(getB()!=0){result = getB(); //定义0与另一个非零数a的最大公约数GCD(0,a)=a }elseresult = 1; //定义0与0的最大公约数GCD(0,0)=1}}else if(getB()==0){if(getA()!=0){result = getA(); //定义0与另一个非零数a的最大公约数GCD(0,a)=a }else{result = 1; //定义0与0的最大公约数GCD(0,0)=1}}else //求两个非零数的最大公约数{long commonDivisor[];commonDivisor=aDivisor.getCommonDivisor(bDivisor);for(int i = 1;i<(int)commonDivisor[0];i++){if(result<commonDivisor[i]){result = commonDivisor[i];}}if(getA()<0 && getB()<0){result = -result; //两个负数的最大公约数是负数}else if(getA()>0 && getB()>0) //两个正数的最大公约数已经求出,不做处理{}else{result = 1; //两个异号数的最大公约数是1}}return result;}public void displayGreatestCommonDivisor(){System.out.println(getA() + "和"+ getB() + "的最大公约数是:"+ getGreatestCommonDivisor());}}class Divisor //求长整型a的所有约数{private long a;private long divisor[];private final int MAXIMUMINDEXOFDIVISOR = 10000;Divisor(){a = 1;divisor = new long[MAXIMUMINDEXOFDIVISOR];divisor[0] = 1;divisor[1] = 1;for (int i = 2;i<MAXIMUMINDEXOFDIVISOR;i++){divisor[i] = 1;}}Divisor(long a){if(a>=0){a = a;}else{a = -a;}this.a = a;divisor = new long[MAXIMUMINDEXOFDIVISOR];divisor[0] = 1;divisor[1] = 1;int index = 2;//数字a的约数的顺序号for (long j = 2;j<=getA();j++){if(getA()%j==0){divisor[index] = j;System.out.printf("divisor[index]=%5d\t",divisor[index]);index++;}}index--;divisor[0] = index;System.out.printf("divisor[0]=%5d\n",divisor[0]);for(int j = index + 1;j<MAXIMUMINDEXOFDIVISOR;j++){divisor[j] = 1;}}public void setA(long a){if(a>=0){this.a = a;}else{this.a = -a;}}public long getA(){return a;}public void setDivisor(){divisor[0] = 1;divisor[1] = 1;int index = 1;//属性a的约数的顺序号for(long j = 2;j<=getA();j++){if(getA()%j==0){index++;divisor[index] = j;}}divisor[0] = index;for(int j = index + 1;j<MAXIMUMINDEXOFDIVISOR;j++){divisor[j] = 1;}}public long[] getDivisor(){return divisor;}public long[] getCommonDivisor(Divisor aDivisor) //求本对象的成员变量a和另一个类Divsior型对象中的成员变量a的所有公约数{long []result = new long[MAXIMUMINDEXOFDIVISOR];long otherDivisor[] = aDivisor.getDivisor();int littleIndex = (int)(divisor[0]<otherDivisor[0]?divisor[0]:otherDivisor[0]);int bigIndex = (int)(divisor[0]>otherDivisor[0]?divisor[0]:otherDivisor[0]);//System.out.printf("littleIndex=%5d\tbigIndex=%5d\t",littleIndex,bigIndex);int commonDivisorIndex = 1;result[0] = 1;result[1] =1;for(int i = 2;i<=littleIndex;i++){for(int j = 2;j<=bigIndex;j++){if(divisor[i]==otherDivisor[j]){commonDivisorIndex++;result[commonDivisorIndex] = divisor[i];}}}result[0] = commonDivisorIndex;for(int j = commonDivisorIndex + 1;j<MAXIMUMINDEXOFDIVISOR;j++){result[j] = 1;}return result;}public void displayDivisor(){long aDivisor[];aDivisor = getDivisor();System.out.println(getA() + "有" + aDivisor[0] + "个约数,分别是:");for(int i = 1;i<=aDivisor[0];i++){System.out.printf("\t%10d",aDivisor[i]);}}}class LeastCommonMultiple //求成员变量a和成员变量b的最小公倍数{private long a;private long b;LeastCommonMultiple(){a = 1;b = 1;}LeastCommonMultiple(long a,long b){this.a = a;this.b = b;}public void setA(long a){this.a = a;}public long getA(){return a;}public void setB(long b){this.b = b;}public long getB(){return b;}public long getLeastCommonMultiple(){GreatestCommonDivisor gCD = new GreatestCommonDivisor(a,b);long result = 1;if(a==0 && b==0) //定义0和一个数a的最小公倍数LCM(0,a)=0{result = 0;}else{result = a * b / gCD.getGreatestCommonDivisor();}return result;}public void displayLeastCommonMultiple(){System.out.println(getA() + "和"+ getB() + "的最小公倍数是:"+ getLeastCommonMultiple());}}public class Test{public static void main(String [] args){GreatestCommonDivisor gCD = new GreatestCommonDivisor(40,60);gCD.displayGreatestCommonDivisor();LeastCommonMultiple leastCommonMultiple = new LeastCommonMultiple(gCD.getA(),gCD.getB());leastCommonMultiple.displayLeastCommonMultiple();/*GreatestCommonDivisor greatestCommonDivisor = new GreatestCommonDivisor(40,0);SubGreatestCommonDivisor subGreatestCommonDivisor = new SubGreatestCommonDivisor(greatestCommonDivisor.getA(),greatestCommonDivisor.getB());System.out.println(greatestCommonDivisor.getA() + "和"+ greatestCommonDivisor.getB() + "的最大公约数是:"+ greatestCommonDivisor.getGreatestCommonDivisor());System.out.println(subGreatestCommonDivisor.getA() + "和"+ subGreatestCommonDivisor.getB() + "的最小公倍数是:"+ subGreatestCommonDivisor.getGreatestCommonDivisor());*/}}。
输入整数m,n,求出m,n的最大公约数和最小公倍数 java循环语句

输入整数m,n,求出m,n的最大公约数和最小公倍数 java循环语句嘿,咱今天就来好好唠唠这个输入整数 m 和 n,然后求出它们最大公约数和最小公倍数的事儿!这就好像是一场刺激的探险,咱得一步步解开这个谜团。
你想啊,m 和 n 就像是两个神秘的数字小伙伴,咱得想办法搞清楚它们之间的关系。
用 java 循环语句来解决这个问题,那就像是给我们配备了一把神奇的钥匙。
比如说,咱可以用一个循环从它们中间找出那些能同时整除 m 和 n 的数字,这可不就是在挖掘宝藏嘛!就像你在一堆乱石中寻找那颗最闪亮的宝石。
然后呢,把这些数字都收集起来,慢慢筛选出那个最大的公约数。
那最小公倍数呢,就像是给 m 和 n 搭建一个温暖的小窝,要找到一个最合适的数字,能同时包含它们俩。
这不就跟你找一个最合适的盒子来装两个宝贝一样嘛!咱来看看代码怎么写,下面就是一段示例代码:```javapublic class Main {public static void main(String[] args) {int m = 12;int n = 18;int gcd = findGCD(m, n);int lcm = findLCM(m, n);System.out.println("m 和 n 的最大公约数是:" + gcd); System.out.println("m 和 n 的最小公倍数是:" + lcm); }public static int findGCD(int m, int n) {int gcd = 1;for (int i = 1; i <= m && i <= n; i++) {if (m % i == 0 && n % i == 0) {gcd = i;}}return gcd;}public static int findLCM(int m, int n) {return m * n / findGCD(m, n);}}```看到没,就这么几行代码,就能解开 m 和 n 的秘密啦!这多有意思啊!所以啊,用java 循环语句来求m 和n 的最大公约数和最小公倍数,真的是超级有趣又实用的事儿。
Java实现:求两个数的最大公约数

Java实现:求两个数的最⼤公约数title: Java实现:求两个数的最⼤公约数tags:java算法categories: 个⼈笔记copyright: trueabbrlink: f202date: 2019-12-07 16:44:58求解两个数的最⼤公约数的⼏种⽅法的⽐较1. 暴⼒枚举法优点:思路简单缺点:运算次数多,效率低极端例⼦:求1000和10001的最⼤公约数需要计算1000/2 - 1 = 4999次// 暴⼒枚举法public static int getGreatestCommonDivisor(int a,int b) {int big = a > b ? a : b;int small = a < b ? a : b;if (big % small == 0) {return small;}for (int i = small / 2; i > 1; i--) {if (big % i == 0 && small % i == 0) {return i;}}return 1;}2. 辗转相除法优点:运算次数少确定:模运算的开销较⼤// 辗转相除法public static int getGreatestCommonDivisor2(int a, int b) {int big = a > b ? a : b;int small = a < b ? a : b;if (big % small == 0) {return small;}return getGreatestCommonDivisor2(big % small, small);}3. 更相减损法优点:避免了取模运算,采⽤减法运算,开销较⼩缺点:算法性能不稳定,运算次数多极端例⼦:两数相差悬殊时,如求1和10001的最⼤公约数,需要递归9999次// 更相减损法public static int getGreatestCommonDivisor3(int a, int b) {if(a == b){return a;}int big = a > b ? a : b;int small = a < b ? a : b;return getGreatestCommonDivisor2(big - small, small);}4. 结合辗转相除法和更相减损法(位运算优化)当a和b均为偶数时,gcd(a,b) = 2×gcd(a/2,b/2) = 2×gcd(a >>1,b>>1)。
JAVA经典算法题目(含答案)

int N;
N=0;
try{
N=Integer.parseInt(str);
}
catch(NumberFormatException e){
e.printStackTrace();
}
str=(N>90?"A":(N>60?"B":"C"));
System.out.println(str);
}
}
【程序 6】 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 最大公约数:
public static void main(String args[]){ int i=0; for(i=1;i<=20;i++) System.out.println(f(i));
} public static int f(int x) {
if(x==1 || x==2) return 1;
else return f(x-1)+f(x-2);
System.exit(0);///不能少这句,否则结果会出错 } public static void main(String[] args){
String str=""; exp2 c=new exp2();
str=javax.swing.JOptionPane.showInputDialog("请输入N的值(输入exit退出):"); int N;
{
if(N<0||M<0)
{
System.out.println("ERROR!");
return -1;
java求最大公约数的方法_概述及解释说明

java求最大公约数的方法概述及解释说明1. 引言1.1 概述在计算机编程中,求最大公约数是一个常见且重要的问题。
最大公约数(Greatest Common Divisor,简称GCD)是指能同时整除给定两个或多个整数的最大正整数。
在解决实际问题时,求最大公约数可以帮助我们简化计算、优化算法,并提高程序的效率。
本文将介绍Java中求解最大公约数的方法。
1.2 文章结构本文分为以下几个部分来讨论Java中求解最大公约数的方法:- 引言:对本文进行概述和说明。
- 最大公约数的概念与性质:介绍最大公约数的定义、性质以及其意义与应用。
- Java中求最大公约数的方法:探讨目前常用的三种方法,包括辗转相除法、基于质因数分解的方法和比较法。
- 方法解释与实现示例:对每种方法进行详细描述,并给出具体实现示例。
- 结论:总结本文内容,并提供不同情景下选择和应用建议。
1.3 目的本文旨在全面介绍Java中求解最大公约数的常见方法,通过详细说明每种方法的原理和实现步骤,使读者能够理解不同方法之间的比较,从而在实际应用中选择合适的求解方法。
通过本文的学习,读者将能够掌握Java求最大公约数的技巧,并能够灵活运用于问题解决中。
2. 最大公约数的概念与性质2.1 基本定义:最大公约数(Greatest Common Divisor,简称GCD)指的是两个或多个整数共有的最大因数,即能够同时整除这些整数的最大正整数。
例如,对于整数30和45来说,它们的最大公约数为15,因为15既能整除30也能整除45。
2.2 公约数的性质:- 公约数必然是它所对应被求公约数的两个或多个整数的因子。
- 任意两个非零正整数一定存在一个共同的因子,即它们至少存在一个公约数。
- 若a和b是整数,则它们的绝对值之间的最小正值就是它们的最大公约数。
2.3 最大公约数的意义与应用:最大公约数在很多实际问题中都有着重要意义和广泛应用:- 通讯传输:在数据传输过程中需要保证数据正确无误地接收。
Java基础编程题(含答案)_7

51道JAV A基础编程练习题1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?2. 判断101-200之间有多少个素数,并输出所有素数。
3. 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
4. 将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5。
5. 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
6. 输入两个正整数m和n,求其最大公约数和最小公倍数。
7. 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
8. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
9. 一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程找出1000以内的所有完数。
10. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?11. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?12. 企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?13. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?14. 输入某年某月某日,判断这一天是这一年的第几天?(变形:输入某一天,输出一千天后是那一天)15. 输入三个整数x,y,z,请把这三个数由小到大输出。
java第一次作业题目2021版

java第一次作业题目2021版1. 题目:从键盘上输入两个正整数m和n,求其最大公约数和最小公倍数,必须判断输入数的正确性(比如非正整数等必须提示)。
[选题人数:3] 2. 题目:给出一个月的总天数编写程序,提示用户输入月份和年份,然后显示这个月的天数。
例如,如果用户输入的月份是2而年份是2000,那么程序应显示“2000年2月有29天”。
如果用户输入的月份为3而年份为2021,那么程序就应该显示“2021年3月有31天”。
(提示:必须判断是否是闰年) [选题人数:3]3. 题目:计算一个三角形的周长编写程序,提示用户从键盘输入三角形的三条边,如果输入值合法就计算这个三角形的周长,否则,显示这些输入值不合法(如果任意两条边的和大于第三条边,那么输入值都是合法的)。
[选题人数:3] 4. 题目:奖金发放问题企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?[选题人数:3]5. 题目:打印金字塔形的数字编写一个嵌套的for循环,打印下面的输出。
1 2 1 1 2 4 2 1 1 2 4 8 4 2 1 1 2 4 8 168 4 2 11 2 4 8 16 32 16 8 4 2 11 2 4 8 16 32 64 32 16 8 4 2 11 2 4 8 16 32 64 128 64 32 16 8 4 2 1[选题人数:2] 6. 题目:十进制转换成二进制或十六进制编写程序,从键盘上输入一个十进制整数,然后显示对应的二进制值或十六进制值。
JavaEE基础教程课后习题答案

第一章Java语言概述与编程环境1.Java语言特点是什么?Java语言具有如下特性:简单性、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。
2.什么叫Java虚拟机?什么叫Java平台?Java虚拟机与Java平台的关系如何?Java虚拟机(Java Virtual Machine) 简称JVM 。
Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。
Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。
3.Java程序是由什么组成的?一个程序中必须有public类吗?Java源文件的命名规则是怎样的?一个Java源程序是由若干个类组成。
一个Java程序不一定需要有public类:如果源文件中有多个类时,则只能有一个类是public类;如果源文件中只有一个类,则不将该类写成public 也将默认它为主类。
源文件命名时要求源文件主名应与主类(即用public修饰的类)的类名相同,扩展名为.java。
如果没有定义public类,则可以任何一个类名为主文件名,当然这是不主张的,因为它将无法进行被继承使用。
另外,对Applet小应用程序来说,其主类必须为public,否则虽然在一些编译编译平台下可以通过(在BlueJ下无法通过)但运行时无法显示结果。
4.开发与运行Java程序需要经过哪些主要步骤和过程?(1) 下载、安装J2SDK;(2) 设置运行环境参数:JAVA_HOME、PATH、CLASSPATH;(3) 使用文本编辑器编写原代码如HelloWorld.java;(4) 运行命令“javac HelloWorld.java”编译HelloWorld.java为HelloWorld.class;(5) 运行“java HelloWorld”生成HelloWorld.exe。
5.怎样区分应用程序和小应用程序?应用程序的主类和小应用程序的主类必须用public修饰吗?Java Application是完整的程序,需要独立的解释器来解释运行;而Java Applet则是嵌在HTML 编写的Web页面中的非独立运行程序,由Web浏览器内部包含的Java解释器来解释运行。
求最大公约数(欧几里得和连续整数检测)java描述

3:将n的值赋给m,将r的值赋给n,返回步骤1。
java代码
public static int gcd(int m,int n){ while (n!=0){ int r = m%n; m=n; n=r; } retur:将min{m,n}的值赋给t。 2:m除以t。如果余数为0,进入步骤3;否则进入步骤4. 3:n除以t。如果余数为0,返回t的值作为结果,否则进入步骤4。 4:把t的值减1.返回步骤2
网络错误503请刷新页面重试持续报错请尝试更换浏览器或网络环境
欧几里得算法
基本原理
反复执行下面的等式: gcd(m,n) = gcd(n,m mod n) (m mod n 表示m除以n之后的余数)
求最大公约数(欧几里得和连续整数检测)java描述
例如:gcd(60,24) = gcd(24,12) = gcd(12,0) = 12 描述: 1:如果n=0,返回m的值作为结果,同时过程结束;否则,进入步骤2。
java代码
public static int ctd(int m,int n){ int t = Math.min(m, n); while (t>0){ if (m%t==0&&n%t==0){ return t; } t--; } return Math.max(m, n);
}
JAVA经典算法题目(含答案)

JAVA经典算法题目(含答案)【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....publicclae某p2{publictaticvoidmain(Stringarg[]){inti=0;for(i=1;i<=20;i++)Sytem.out.println(f(i));}publictaticintf(int某){if(某==1||某==2)return1;elereturnf(某-1)+f(某-2);}}或publicclae某p2{publictaticvoidmain(Stringarg[]){inti=0;mathmymath=newmath();for(i=1;i<=20;i++)Sytem.out.println(mymath.f(i));}}clamath{publicintf(int某){if(某==1||某==2)return1;elereturnf(某-1)+f(某-2);}}【程序2】题目:打印出所有的\水仙花数\,所谓\水仙花数\是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个\水仙花数\,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
publicclae某p2{publictaticvoidmain(Stringarg[]){inti=0;mathmymath=newmath();for(i=100;i<=999;i++)if(mymath.hui某ianhua(i)==true)Sytem.out.println(i);}}clamath{publicintf(int某){if(某==1||某==2)return1;elereturnf(某-1)+f(某-2);}publicbooleanizhihu(int某){for(inti=2;i<=某/2;i++)if(某%2==0)returnfale;returntrue;}publicbooleanhui某ianhua(int某){inti=0,j=0,k=0;i=某/100;j=(某%100)/10;k=某%10;if(某==i某i某i+j某j某j+k某k某k)returntrue;elereturnfale;}}【程序3】题目:判断101-200之间有多少个素数,并输出所有素数。
最多约数问题(Java)

最多约数问题(Java)Description正整数x 的约数是能整除x 的正整数。
正整数x的约数个数记为div(x)。
例如,1,2,5,10 都是正整数10的约数,且div(10)=4。
设a 和b是2 个正整数,a≤b,找出a 和b之间约数个数最多的数x。
对于给定的2 个正整数a≤b,计算a 和b之间约数个数最多的数。
Input输⼊数据的第1⾏有2个正整数a和 b,a≤1000000000,b≤1000000000。
Output若找到的a 和b之间约数个数最多的数是x,将div(x)输出。
Sample Input1 36Sample Output9其他测试数据:1 3691000000 2000000288999998999 99999999910241 10000000001344100 10000000001344666 6666666661200这⼀题卡了⼀阵⼦了,是在看不懂,琢磨不明⽩书上的代码了,只能照抄了。
正整数x可以分解为质因⼦之积:x = p_1^{N_1} * p_2^{N_2} * p_3^{N_3} * ... * p_k^{N_k}所以约数div的公式为:div(x) = (N_1 + 1)(N_2 + 1)...(N_k + 1)期间还参考了:感觉这个有点问题,测试数据没过这个也没看太明⽩。
这个注释写的多我⾃⼰写的AC代码:import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner cin = new Scanner(System.in);int lift;int right;lift = cin.nextInt();right = cin.nextInt();MaxDiv maxDiv = new MaxDiv();MaxDiv.primes();if (lift == 1 && right == 1) {MaxDiv.max_num = 1;MaxDiv.numb = 1;} else {MaxDiv.max_num = 2;MaxDiv.numb = 1;MaxDiv.search(1, 1, 1, lift, right);}System.out.println(MaxDiv.max_num);/*System.out.println(MaxDiv.numb);*/}}class MaxDiv {public static int max_num; // 存最多的质因⼦个数Processing math: 0%public static int numb; // 存质因⼦最多的数public final static int MAXP = 31622; // 普通数组最⼤的⼤⼩public final static int PCOUNT = 3401; // 素数数组最⼤的⼤⼩public static int prime[] = new int[PCOUNT + 1]; // 素数数组// 欧拉筛法求素数表public static void primes() {int k = 0;boolean num[] = new boolean[MAXP + 1];for (int i = 2; i <= MAXP; i++) {num[i] = true;}for (int i = 2; i <= MAXP; i++) {if (num[i]) {prime[++k] = i;}for (int j = 1; j <= k && prime[j] * i <= MAXP; j++) {num[prime[j] * i] = false;}}}// 这个函数没明⽩, 照抄书上的public static void search(int from, int tot, int num, int low, int up) { if (num >= 1)if ((tot > max_num) || ((tot == max_num) && (num < numb))) { max_num = tot;numb = num;}if (low == up && low > num)search(from, tot * 2, num * low, 1, 1);for (int i = from; i <= PCOUNT; i++) {if (prime[i] > up)return;else {int j = prime[i];int x = low - 1;int y = up;int n = num, t = tot, m = 1;// 应该是循环除质因⼦while (true) {m++;t += tot;x /= j;y /= j;if (x == y)break;n *= j;search(i + 1, t, n, x + 1, y);}m = 1 << m;if (tot < max_num / m)return;}}}}。
java求n个整数的最大公约数

实验报告三JA VA程序设计基础1.实验目的熟练运用分支、循环等语句控制程序流程,掌握方法的声明和调用,以及字符串。
掌握使用命令行参数作为输入数据的方法,找出程序错误位置和出错原因。
2.实验内容():书上60页,2-26求N个整数的最大公约数。
代码:Gys.java——文件名public class Gys {public static int gys(int a,int b){int temp;while(b!=0){temp=a%b;a=b;b=temp;System.out.print("gys("+a+","+b+")=");——输出运算过程}System.out.println(a);——输出最大公约数return a;}public static void main(String[] args) {int n=5,x,y,temp;int a[]={12,60,160,64,80};temp=a[0];for(int i=0;i<a.length-1;i++){x=temp;y=a[i+1];temp=gys(x,y);}System.out.print(temp);——输出n个数的最大公约数}}运行结果:(2)验证性实验:书上P54例2.10从标准输入流中读取一行字符串再转换成整数。
代码:Input.java——文件名import mypackage.*;public class Input {public static String readLine()throws java.io.IOException{System.out.println("输入一行字符串,以回车换行符结束");byte buffer[]=new byte[512];int count=System.in.read(buffer);System.in.close();return(count==-1)?null:new String(buffer,0,count-2);}public static void main(String args[])throws java.io.IOException { String s=readLine();int value=MyInteger.parseInt(s);System.out.println("MyInteger.toString("+value+",2)="+MyInteger.t oString(value,2));System.out.println("MyInteger.toString("+value+",16)="+MyInteger. toString(value,16));}}MyInteger.java——文件名package mypackage;public class MyInteger {public static int parseInt(String s) throws NumberFormatException {if(s==null)throw new NumberFormatException("null");char ch=s.charAt(0);int value=0,i=0,sign=1,radix=0;if(ch>='1'&&ch<='9'||ch=='+'||ch=='-'){radix=10;if(ch=='+'||ch=='-')i++;sign=ch=='-'?-1:1;}else if(ch=='0'&&s.charAt(1)!='x'){radix=8;i++;}else if(ch=='0'&&s.charAt(1)=='x'){radix=16;i+=2;}else throw new NumberFormatException("整数不能识别\'"+ch+"\'字符");while(i<s.length()){ch=s.charAt(i++);if(ch>='0'&&ch-'0'<radix)value=value*radix+ch-'0';else if(radix==16&&ch>'a'&&ch<='f')value=value*radix+ch-'a'+10;else if(radix==16&&ch>'A'&&ch<='F')value=value*radix+ch-'A'+10;else throw new NumberFormatException(radix+"进制整数不能识别\'"+ch+"\'字符");}return value*sign;}public static String toString(int value,int radix){if(radix==10)return value+"";if(radix==2||radix==4||radix==8||radix==16){int mask,n=0;for(mask=radix-1;mask>0;mask>>>=1)n++;mask=radix-1;char buffer[]=new char[(int)(32.0/n+0.5)];for(int i=buffer.length-1;i>=0;i--){int bit=value&mask;buffer[i]=(char)(bit<=9?bit+'0':bit+'a'-10);value>>>=n;}return new String(buffer);}throw new IllegalArgumentException("radix参数值"+radix+"表示的进制数无效。
N个数的最大公约数

1.最大公约数(ngcd,PID721)
【问题描述】
有N个整数,kAc会对它们做Q次修改。
每次修改指的是对所有数加一个整数(可正可负)
每修改一次后,他想知道当前所有数的最大公约数是多少。
【输入文件】
第一行两个整数N, Q
接下来一行,N个整数,表示这N个数的初始值。
接下来Q行,每行一个整数,表示这Q个操作。
第i个数表示这一次操作是增加了多少。
【输出文件】
共Q行,表示进行完第i次操作后,所有数的最大公约数
【输入样例】
3 2
1 -5 7
-1
1
【输出样例】
6
1
【数据规模】
对于40%:N, Q <= 1000
对于70%:N, Q <= 40000
对于100%:N, Q <= 100000,所有数的绝对值始终小于等于10^16
在这里,我们认为任意非负整数x跟0的最大公约数都是x,另外,负数的最大公约数等于其绝对值的最大公约数。
【算法分析】
gcd(a,b)=gcd(a,a-b)
3个数(a1,a2,a3)的最大公约数等价于(a1,a2-a1, a3-a1)的最大公约数
整体增加一个值,差值不会变!先求出a1-ai的gcd=x,对于每个增量d,只需求gcd(a1+d,x)。
最大公因子和最小公倍数java代码

说明最大公因数使用辗转相除法来求,最小公倍数则由这个公式来求:
GCD GCD GCD
GCD
* * *
*
LCM LCM LCM
LCM
= = =
=
两数乘积解法最大公因数可以使用递回与非递回求解,因式分解基本上就是使用小于输入数的数值当
作除数,去除以输入数值,如果可以整除就视为因数,要比较快的解法就是求出小于该数的所有质数,并试试看是不是可以整除,求质数的问题是另一个课题,请参考 Eratosthenes 筛选求质数。
代码:
package test;
import java.util.Scanner;
public class Gcd {
public static void main(String[] args){
int r;
Scanner in = new Scanner(System.in);
System.out.println("请输入两个值m和n:");
int m = in.nextInt();
int n = in.nextInt();
int s = m*n;
while(n!=0){
r = m%n;
m = n;
n = r;
}
System.out.println("GCD is:"+m);
System.out.println("LCM is:"+s/m);
}
}
执行结果:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告三JA VA程序设计基础1.实验目的熟练运用分支、循环等语句控制程序流程,掌握方法的声明和调用,以及字符串。
掌握使用命令行参数作为输入数据的方法,找出程序错误位置和出错原因。
2.实验内容():书上60页,2-26求N个整数的最大公约数。
代码:Gys.java——文件名public class Gys {public static int gys(int a,int b){int temp;while(b!=0){temp=a%b;a=b;b=temp;System.out.print("gys("+a+","+b+")=");——输出运算过程}System.out.println(a);——输出最大公约数return a;}public static void main(String[] args) {int n=5,x,y,temp;int a[]={12,60,160,64,80};temp=a[0];for(int i=0;i<a.length-1;i++){x=temp;y=a[i+1];temp=gys(x,y);}System.out.print(temp);——输出n个数的最大公约数}}运行结果:(2)验证性实验:书上P54例2.10从标准输入流中读取一行字符串再转换成整数。
代码:Input.java——文件名import mypackage.*;public class Input {public static String readLine()throws java.io.IOException{System.out.println("输入一行字符串,以回车换行符结束");byte buffer[]=new byte[512];int count=System.in.read(buffer);System.in.close();return(count==-1)?null:new String(buffer,0,count-2);}public static void main(String args[])throws java.io.IOException { String s=readLine();int value=MyInteger.parseInt(s);System.out.println("MyInteger.toString("+value+",2)="+MyInteger.t oString(value,2));System.out.println("MyInteger.toString("+value+",16)="+MyInteger. toString(value,16));}}MyInteger.java——文件名package mypackage;public class MyInteger {public static int parseInt(String s) throws NumberFormatException {if(s==null)throw new NumberFormatException("null");char ch=s.charAt(0);int value=0,i=0,sign=1,radix=0;if(ch>='1'&&ch<='9'||ch=='+'||ch=='-'){radix=10;if(ch=='+'||ch=='-')i++;sign=ch=='-'?-1:1;}else if(ch=='0'&&s.charAt(1)!='x'){radix=8;i++;}else if(ch=='0'&&s.charAt(1)=='x'){radix=16;i+=2;}else throw new NumberFormatException("整数不能识别\'"+ch+"\'字符");while(i<s.length()){ch=s.charAt(i++);if(ch>='0'&&ch-'0'<radix)value=value*radix+ch-'0';else if(radix==16&&ch>'a'&&ch<='f')value=value*radix+ch-'a'+10;else if(radix==16&&ch>'A'&&ch<='F')value=value*radix+ch-'A'+10;else throw new NumberFormatException(radix+"进制整数不能识别\'"+ch+"\'字符");}return value*sign;}public static String toString(int value,int radix){if(radix==10)return value+"";if(radix==2||radix==4||radix==8||radix==16){int mask,n=0;for(mask=radix-1;mask>0;mask>>>=1)n++;mask=radix-1;char buffer[]=new char[(int)(32.0/n+0.5)];for(int i=buffer.length-1;i>=0;i--){int bit=value&mask;buffer[i]=(char)(bit<=9?bit+'0':bit+'a'-10);value>>>=n;}return new String(buffer);}throw new IllegalArgumentException("radix参数值"+radix+"表示的进制数无效。
");}}运行结果:(3)编程:书上60页,2-29,判断标识符。
代码:jugeBzf.java——文件名package mypackage;public class jugeBzf {public static boolean isIdentifier(String s){char s1=s.charAt(0);if((s1>='a'&&s1<='z')||(s1>='A'&&s1<='Z')||s1=='_'||s1=='$'){for(int i=1;i<s.length();i++){ char s2=s.charAt(i);if((s2>='a'&&s2<='z')||(s2>='A'&&s2<='Z')||(s2>='0'&&s2<='9')||s2 =='_'||s2=='$'){}elsereturn false;}}elsereturn false;return true;}public static void main(String[] args) {String s="_f120*12";if(isIdentifier(s)==false)System.out.print(s+"不是标识符");elseSystem.out.print(s+"是标识符");}}运行结果:aaaBzf.java——文件名package mypackage;public class aaaBzf {public static String toIdentifier(String s){String snew="";char s1;int i,j;for(i=0;i<s.length();i++){s1=s.charAt(i);if((s1>='a'&&s1<='z')||(s1>='A'&&s1<='Z')||s1=='_'||s1=='$') {snew+=s1;break;//首字符必须是字母,顺序判断字符串。
第一次出现字母终止循环,该字母成为新标识符snew的首字符。
}}for(j=i+1;j<s.length();j++){char s2=s.charAt(j);if((s2>='a'&&s2<='z')||(s2>='A'&&s2<='Z')||(s2>='0'&&s2<='9')||s2 =='_'||s2=='$')snew+=s2;//首字符过后,只有字母或数字才被添加到新标识符snew中。
}return snew;}public static void main(String[] args) {String s="12_*abc%%%%de$$$f__ff";System.out.print(s+" 中是识别出的所有标志符是:"+toIdentifier(s));}}运行结果:。