Knowledge is Power Gym - 102822K
题意:
给你一个数n,让你将n分解成一些互质的数,然后这些数的最大值减最小值要求最小,如果不行输出-1,否则输出最大值减最小值的最小情况
题解:
具体做法是通过枚举大量数据找到规律
- 如果n<=6,直接输出-1
- 如果n是奇数,n可以分解成n/2和n/2+1,必互质,答案为1
- 如果n是偶数,分多个情况
A. n/2是偶数,可以分成n/2-1和n/2+1,必互质
B. n/2是奇数,分情况:
I. 如果n%3 = = 0,说明可以分成n/3-1,n/3,n/3+1,答案为3
II.如果n%3 = = 1,说明可以分成(n-1)/3-1,(n-1)/3,(n-1)/3+2,如果互质答案为3,否则为4
III.如果n%3 = = 2,说明可以分解成(n+1)/3-2,(n+1)/3,(n+1)/3+1,如果互质答案为3,否则为4
代码:
#include<bits/stdc++.h>using namespace std;int main() {int t, T = 1;scanf("%d", &t);while (t--) {int n;scanf("%d", &n);printf("Case #%d: ", T++);if (n & 1) printf("1\n");else if (n % 4 == 0) printf("2\n");else if (n == 6) printf("-1\n");else {if (n % 3 == 0) {printf("2\n");} else if (n % 3 == 1) {int a = (n - 1) / 3;int b = a - 1, c = a + 2;if ( __gcd(b, c) == 1) printf("3\n");else printf("4\n");} else if (n % 3 == 2) {int a = (n + 1) / 3;int b = a - 2, c = a + 1;if (__gcd(b, c) == 1) printf("3\n");else printf("4\n");}}}return 0;
}