欧几里得
时间限制:
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
-
n-1就是答案,需要用到大数减1
-
#include<stdio.h> #include<string.h> char n[100000]; int d[100000]; int e[100000]; int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",n); int l; l=strlen(n); int sum=0; int p=0; memset(e,0,sizeof(e)); memset(d,0,sizeof(d)); if(l==1&&n[0]=='1') { printf("0\n"); } else { e[l-1]=1; for(int i=0; i<l; i++) { n[i]=n[i]-48; } for(int i=l-1; i>=0; i--) { sum=n[i]-e[i]; if(sum<0) { d[p++]=sum+10; n[i-1]=n[i-1]-1; } else { d[p++]=sum; } } for(int i=p-1; i>=0; i--) { if(d[i]!=0) { for(int j=i; j>=0; j--) { printf("%d",d[j]); } printf("\n"); break; } } } } }
-
输入文件的第一行是一个正整数T,表示有T组测试数据