XTU 1220 A+B Again

来源:互联网 发布:python 财经数据接口 编辑:程序博客网 时间:2024/05/29 17:41

A+B Again

 Accepted : 34 Submit : 337Time Limit : 1000 MS Memory Limit : 65536 KB

题目描述

上次趣味赛小明的a+b坑了不少不喜欢思考的同学,小明为了表示歉意, 这次出了道简单的a+b给大家当签到题,希望大家能开心刷题。 那么,题目来了!!!
求使得b/(a+x)为整数的最小正整数x的值。

输入

第一行是一个整数K(K≤10000),表示样例的个数。 以后每行一个样例,为两个正整数a,b(1≤a,b≤108)。

输出

每行输出一个样例的结果,如果不存在这样的x,输出-1。

样例输入

31 21 31 4

样例输出

121


解题思路:题目很简单,稍微化下简,就可以看出目就是求b的因子减去a的最小正整数,如果没有就输出-1。。

假设:b/(a+x)=n
            nx=b-na
            x=b/n-a

代码如下:

#include <stdio.h>#include <math.h>#include <algorithm>#include <string.h>#define maxn 100001;using namespace std;int main(){int a,b,t;scanf("%d",&t);while(t--){scanf("%d %d",&a,&b);int s=(int)sqrt(b),ans=111111111,f=0;if(b<=a) {printf("-1\n"); continue;}        for(int i=s;i>=1;i--)        {            if(b%i!=0) continue;            if(b/i-a>0){ans=min(ans,b/i-a); f=1;}///因为i为一个因子,那么b/i也是一个因子            if(i-a>0){ans=min(ans,i-a); f=1;}///寻找最小的        }        if(f) printf("%d\n",ans);        else printf("-1\n");}return 0;}


0 0