【题解】UVA10407 题解

UVA10407 题解

思路分析

我们设每一个数为 aia_i,且有 ai=biqi+ria_i = b_iq_i+r_i0<r<bi0 < r < b_i)。在题目中,bib_irir_i 一定,于是令bib_irir_i 分别为 bbrr

为抵消 rr 并得到有关整除的相关信息,我们设有 akak1a_k \geq a_{k-1},计算 akak1a_k-a_{k-1}。得到 akak1=b(qkqk1)a_k-a_{k-1}=b(q_k-q_{k-1}),所以有 b(akak1)b \mid (a_k-a_{k-1})。由于所有的 aka_kak1a_{k-1} 都要满足,所以,求所有 akak1a_k-a_{k-1} 的最大公因数即可,这个即为答案。注意要满足 akak1a_k \geq a_{k-1},所以要进行排序。

关键代码

sort(a + 1, a + cur + 1); 
int ans = a[cur] - a[cur - 1];
for(int i = cur - 1;i >= 2;i--) //倒着计算,不会出现负数。
{
	ans = __gcd(ans, a[i] - a[i - 1]);
}
cout << ans << endl;
posted @ 2022-11-11 17:33  邻补角-SSA  阅读(14)  评论(0)    收藏  举报  来源