zoukankan      html  css  js  c++  java
  • [算法]求满足要求的进制(辗转相除(欧几里得算法),求最大公约数gcd)

    题目

    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;
    	}
    }
    
  • 相关阅读:
    编程里的数字游戏
    SqlServer2005Express下的事件探查器
    来玩玩这个
    把一个bitmap在内存中的数据块 搬到另一个bitmap中
    一些常用的sql
    C#图像处理
    来玩玩画直线
    关于未来的思考
    年末个人小结
    [转载]编写超级可读代码的15个最佳实践
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/12040445.html
Copyright © 2011-2022 走看看