标签:
也就是著名的扩展欧几里得正解。
nn‘+mm‘= d
有整数解时候d|gcd(n,m).
而扩展欧几里得求出来的n‘ m‘可能为负数。并且即使是正数也不一定是最小的正数解。
这里有。根据同余定理。
首先nn‘+mm‘= d
即 nn‘-m(-m‘) = d 式子1
对于nn‘ ≡ d (mod m)
nn‘ - km = d 类比式子1 。也就是说k = -m‘ 时。
式子1可以弄成 nn‘ ≡ d (mod m) 这样的同余式。
也就是求n‘满足 nn‘ mod m = d
已知 n0‘ 是用扩展欧几里得解出来一个解。
那么。n (n‘ + - m) mod m = d + - 代表可加可减。
那么。 我们求得n‘ 可以通过加减m 可以变化到最小正数解。 你也许怀疑有更小的值加减或者变化区度更小的使得我们加减m是得不到的。但是仔细观察和思考一下。是不会的。
而这种变化可以有以下代码实现:
#include<stdio.h> int main() { int n; while(scanf("%d",&n)!=EOF) { if(n<0) { printf("%d\n",(n)%3+3); } else { printf("%d\n",(n)%3); } } }
标签:
原文地址:http://www.cnblogs.com/Milkor/p/4446088.html