NYOJ 欧几里得
- 描述
-
已知gcd(a,b)表示a,b的最大公约数。
现在给你一个整数n,你的任务是在区间[1,n)里面找到一个最大的x,使得gcd(x,n)等于1。
- 输入
- 输入文件的第一行是一个正整数T,表示有T组测试数据
接下来有T行,每行有一个正整数n (1<=n<=10^1000)。 - 输出
- 每组测试输出要求x。
- 样例输入
-
2 4 7
- 样例输出
-
3 6
这题从头至尾就是个坑。题目说的是“欧几里得”,结合题目,很容易让人马虎,按照欧几里得算法解题。但是认真读题的话,不难发现 n 的范围,是一个大数问题。一句话:n-1就是最后结果。1 #include <stdio.h> 2 #include <string.h> 3 char count[1002]; 4 int main(void){ 5 int T; 6 scanf("%d",&T); 7 getchar(); 8 while(T--){ 9 gets(count); 10 int len = strlen(count); 11 12 if(count[len - 1] != '0'){ 13 count[len - 1]--; 14 printf("%s\n",count); 15 }else{ 16 int i = len - 1; 17 while(count[i] == '0'){ 18 count[i] = '9'; 19 i--; 20 } 21 count[i]--; 22 for(int j = 0; j < len; j++) 23 if(count[j] != '0') 24 printf("%c",count[j]); 25 printf("\n"); 26 } 27 } 28 return 0; 29 }