WUSTOJ 1347: GCD(Java)互质
题目链接:1347: GCD
Description
已知gcd(a,b)表示a,b的最大公约数。
现在给你一个整数n,你的任务是在区间[1,n)里面找到一个最大的x,使得gcd(x,n)等于1。
Input
输入文件的第一行是一个正整数T,表示有T组测试数据
接下来有T行,每行有一个正整数n (1<=n<=10^1000)。
Output
每组测试输出要求x。
Sample Input
7
1
2
15
100
2315
100000000000000000000000000000000000000000000000000000000
20000000000000000000000000000000000000000000000000000000000000000000000000000000
Sample Output
1
14
99
2314
99999999999999999999999999999999999999999999999999999999
19999999999999999999999999999999999999999999999999999999999999999999999999999999
分析💬
n
为1的时候,不存在x
属于[1,1)的,所以什么都不输出,直接换行。
结论:任意两个相邻的正整数互质。
证明:
假设两个相邻的正整数为n和n+1。
假设它们不互质,那么存在一个最大公约数a(a>1)。
则n%a=0,(n+1)%a=0。
又因为n%a=0,所以(n+1)%a=1,与假设矛盾。
故n和n+1互质。
代码💻
/**
* Time 242ms
* @author wowpH
* @version 1.0
* @date 2019年7月5日上午10:01:55
* Environment: Windows 10
* IDE Version: Eclipse 2019-3
* JDK Version: JDK1.8.0_112
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while ((T--) > 0) {
char[] n = sc.next().toCharArray(); // 正整数n
for (int i = n.length - 1; i >= 0; --i) {
if ('0' == n[i]) { // 向前借一位,减1变成9
n[i] = '9';
} else {
n[i] = (char) (n[i] - 1); // 不用借位,直接减1
break;
}
}
if ('0' == n[0]) { // 首位是0,去掉
System.out.println(new String(n, 1, n.length - 1));
} else {
System.out.println(new String(n));
}
}
sc.close();
}
}
版权声明
- 转载、参考、引用必须在首页添加如下文字:
[WUSTOJ 1347: GCD(Java)互质—wowpH](https://blog.csdn.net/pfdvnah/article/details/94720983)
- 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
- 如果有疑问欢迎评论区留言,尽量解答;
- 如果有错误,还望大侠评论区指正。