已知gcd(a,b)表示a,b的最大公约数。
现在给你一个整数n,你的任务是在区间[1,n)里面找到一个最大的x,使得gcd(x,n)等于1。
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 }
原文:http://www.cnblogs.com/yfs123456/p/5459818.html