欧几里得定理 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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值