欧几里得
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
0
-
描述
-
已知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
上传者
-
TC_杨闯亮
大数减一就好注意1的时候输出1ac代码
#include<stdio.h> #include<string.h> int main() { int t; scanf("%d",&t); while(t--) { int n,i,len,k=0,j,m; char s[1010]; scanf("%s",s); len=strlen(s); if(strcmp(s,"1")==0) { printf("1\n"); continue; } m=1; do{ s[len-1]-=1; m=0; if(s[len-1]<'0') { s[len-1]+=10; m=1; } len--; }while(m); for(i=0;;++i) { if(s[i]!='0') { printf("%s\n",s+i); break; } } } }
-
输入文件的第一行是一个正整数T,表示有T组测试数据