码迷,mamicode.com
首页 > 编程语言 > 详细

[算法]求满足要求的进制(辗转相除(欧几里得算法),求最大公约数gcd)

时间:2019-12-14 19:27:58      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:ext   port   ret   输出   最大公约数   要求   turn   mod   one   

题目

3在十进制下满足若各位和能被3整除,则该数能被3整除。
5在十六进制下也满足此规律。
给定数字k,求多少进制(1e18进制范围内)下能满足此规律,找出一个即可,无则输出-1。

题解

写写画画能找到规律,即是求与k互质的数x,x进制下即能满足上述规律。

相关

求最大公约数:辗转相除法(又叫欧几里得算法)

  • 欧几里德定理:gcd(a, b) = gcd(b , a mod b) ,对于正整数a、b.
  • 其中a、b大小无所谓。当a值小于b值时,算法的下一次递归调用就能够将a和b的值交换过来。

代码

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        long k = sc.nextInt();
        long x = k + 1;
        for (; x <= 1e18; ++x) {
            if (gcdGreaterThanOne(k, x)) {
                System.out.println(x);
                break;
            }
        }
        if (x > 1e18) {
            System.out.println(-1);
        }
    }

    public static boolean gcdGreaterThanOne(long num1, long num2) {
        return gcd(num1, num2) == 1;
    }

    private static long gcd(long num1, long num2) {
        while (num2 != 0) {
            long r = num1 % num2;
            num1 = num2;
            num2 = r;
        }
        return num1;
    }
}

[算法]求满足要求的进制(辗转相除(欧几里得算法),求最大公约数gcd)

标签:ext   port   ret   输出   最大公约数   要求   turn   mod   one   

原文地址:https://www.cnblogs.com/coding-gaga/p/12040445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!