站外题求调
  • 板块灌水区
  • 楼主ac_lxy
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/25 19:54
  • 上次更新2024/8/25 22:20:08
查看原帖
站外题求调
678876
ac_lxy楼主2024/8/25 19:54

题目描述

小明在纸上随手写下了N个正整数。他想要知道能否存在一个大于1的整数M,使得这N个数除以M的余数都相同。从小到大依次输出符合条件的所有M。

输入

第一行一个整数N,表示小明写下的正整数个数。 接下来N行,每行一个整数a[i],表示小明写下的第i个数。保证所有数都不相同。

输出

从小到大依次输出所有符合条件的整数M,中间用空格分隔。数据保证至少存在一个这样的M

样例输入

3

6 34 38

样例输出

2 4

数据范围

100%的数据,2<=n<=100,1<=a[i]<=1000000000。


#include<bits/stdc++.h>
#define int long long
using namespace std;  
int gcd(int a, int b) {  
	return b==0?a:gcd(b,a%b);  
}  
int cnt,a[105];
signed main() {  
	int n;  
	cin>>n; 
	for(int i=0;i<n;i++)cin>>a[i];  
	sort(a,a+n);   
	for (int i=1;i<n;i++){  
		if(cnt==0)cnt=a[i]-a[i-1];  
		else cnt=gcd(cnt,a[i]-a[i-1]);    
	} 
	for(int i=2;i<=a[n-1]-a[0];i++){  
		if(cnt%i==0){  
			bool flag=true;  
			for (int j=1;j<n;j++){  
				if((a[j]-a[j-1])%i!=0){  
					flag=false;  
					break;  
				}  
			}  
			if(flag)cout<<i<<" ";   
		}  
	}  
	cout<<endl;  
	return 0;  
}

TLE了咋整

2024/8/25 19:54
加载中...