标签:
题目:
这个题目,不是在O(T)时间内解决的,估计是因为数论学的不好,只能套一些模板了,
比如我看网上基本上都是用欧几里得做的。
好了,说正事,就从欧几里得的理论基础开始说起——带余除法
算了,还是看百科吧点击打开百科
设s=x/k,那么,x=s*k+t,0≤t<k
那么方程化为s*k+t=p*k+q*(k+(t>0))
如果t=0,那么s=p+q,取p=s,q=0
如果t>0,那么s*k+t=(p+q)*k+q,取p=s-t,q=t
所以上面2种情况是一样的。
代码:
#include<iostream> #include<stdio.h> using namespace std; int main() { int n, x, k; scanf("%d", &n); while (n--) { scanf("%d%d", &x, &k); printf("%d %d\n", k - x%k, x%k); } return 0; }
UVA - 10673 Play with Floor and Ceil(手动解方程)
标签:
原文地址:http://blog.csdn.net/nameofcsdn/article/details/52253710