游客 Signup | Login
中文 | En

2013 - 同余问题

给n个数,现在想知道有多少个大于1的整数被这n个数除得到的余数相同,请你帮他~

Input

第一个数为T,表示case数,

每个case第一行输入一个2<=n<=100,表示数字个数

之后输入n个数,每个数都小于10^9。

Output

每个case输出一个数,表示大于1且满足除这n个已给出的数结果余数相同的数的个数。

Examples

Input

2
3
6 34 38
5
5 17 23 14 83

Output

2
1

Hint

第一个样例三个数除以2都余0,除以4都余2,所以符合条件的有两个数。

Solution C++

#include <bits/stdc++.h>
using namespace std;

int T, n, a[109], b[109];

int gcd(int x, int y) {
	return y == 0 ? x : gcd(y, x % y);
}

int main() {
	cin >> T;
	while (T --) {
		cin >> n;
		for (int i = 1; i <= n; i ++) cin >> a[i];
		sort(a + 1, a + 1 + n);
		for (int i = 2; i <= n; i ++) b[i - 1] = a[i] - a[i - 1];
		
		int x = b[1];
		for (int i = 1; i < n; i ++) {
			x = gcd(x, b[i]);
		}
		
		int t = sqrt(x), ans = 0;
		for (int i = 1; i <= t; i ++) {
			if (x % i == 0) {
				ans += 2;
			}
		}
		if (t * t == x) {
			ans --;
		}
		cout << ans - 1 << endl;
	}	

	return 0;
}

Hint

第一个样例三个数除以2都余0,除以4都余2,所以符合条件的有两个数。

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题