快捷搜索: 王者荣耀 脱发

【力扣数论】最大公约数最小公倍数

一.最大公约数 int gcd(int a, int b) { b==0?a:gcd(b,a%b); } 二.最小公倍数 int lcm(int a,int b) { return a/gcd(a,b)*b; }

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

输入: num = 38 输出: 2 解释: 各位相加的过程为: 38 --> 3 + 8 --> 1 11 --> 1 + 1 --> 2 由于 2 是一位数,所以返回 2。 public static void main(String[] args) { int num=38; while(num>=10) { //两位数相加 int a=0; while(num>0) { a+=num%10;//取最后一位 num/=10; } num=a;//改变后赋值 } System.out.println(num); } }

给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。

假如该和结果为 1,那么原数组就是一个「好数组」,则返回 True;否则请返回 False。

输入:nums = [12,5,7,23] 输出:true 解释:挑选数字 5 和 7。 5*3 + 7*(-2) = 1
public static void main(String[] args) {
		int[] nums = {12,5,7,23};
		int get=nums[0];//
		for (int i = 0; i < nums.length; i++) {
			get= Gcd(get,nums[i]);//递归
		}
		System.out.println(get);
	}
	private static int Gcd(int a, int b) {
		return a%b==0?b:Gcd(b,a%b);//最大公约数
	}

给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 。

两个数的 最大公约数 是能够被两个数整除的最大正整数。

输入:nums = [2,5,6,9,10] 输出:2 解释: nums 中最小的数是 2 nums 中最大的数是 10 2 和 10 的最大公约数是 2
public static void main(String[] args) {
		int nums[]= {7,5,6,8,3};
		int a=nums[0];
		int b=nums[0];
		for (int i = 0; i < nums.length; i++) {
			if(nums[i]>a) {
				a=nums[i];}
			if(nums[i]<b) {
				b=nums[i];}
		}
		return get(a,b);
	}
	private static int get(int a, int b) {
		return b==0 ? a:get(b,a%b);	
	}

经验分享 程序员 微信小程序 职场和发展