本文共 902 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到一个最小的正整数 ( x ),它满足给定的同余条件。每个模数 ( M_i ) 大于 ( a ),并且 ( x ) 除以 ( M_i ) 余 ( M_i - a )。
我们可以利用中国剩余定理的思想来解决这个问题。具体来说,我们需要找到一个数 ( x ),它满足以下条件:
为了找到这样的 ( x ),我们可以通过以下步骤:
这个方法的正确性基于以下观察:当模数 ( M_i ) 有多个时,计算它们的最小公倍数可以帮助我们找到一个数,它在所有模数下都满足特定的余数条件。
#includeusing namespace std;typedef long long ll;int main() { int I, a; while (scanf("%d%d", &I, &a) != EOF) { if (I == 0 && a == 0) break; ll ans = 1; for (int num; scanf("%lld", &num) && I-- > 0) { ans = (ans * num) / __gcd(ans, num); } printf("%lld\n", ans - a); }}
ans 为 1,然后逐个读取每个模数 ( M_i ),并更新 ans 为当前 ans 和新模数的最小公倍数。ans 减去 ( a ),得到满足条件的最小正整数 x,并输出结果。这种方法确保了我们能够高效地找到满足所有同余条件的最小数。
转载地址:http://jlewz.baihongyu.com/