【力扣数论】最大公约数最小公倍数
一.最大公约数 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); }