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();
	}
}

版权声明

  1. 转载、参考、引用必须在首页添加如下文字:
    [WUSTOJ 1347: GCD(Java)互质—wowpH](https://blog.csdn.net/pfdvnah/article/details/94720983)
  2. 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
  3. 如果有疑问欢迎评论区留言,尽量解答;
  4. 如果有错误,还望大侠评论区指正。

posted @ 2019-07-05 11:19  wowpH  阅读(380)  评论(0编辑  收藏  举报