PKU Online Judge 1046 Square Number

来源:互联网 发布:解放军信大分配知乎 编辑:程序博客网 时间:2024/05/20 17:39

思路来自:dark_dream的cnblogs博客)

题意:给定正整数b,求最大的整数a,满足a*(a+b) 为完全平方数

解题思路:假设  a^2+a*b = (a+t)^2    -> a^2 + a*b = a^a + 2*a*t +t^2   ->  a*b = 2*a*t +t^2 -> a = t^2/(b-2*t);

因为 a = t^2/(b-2*t);  易知( t >= 0 && t < b/2)。假如 可知  在t的范围内 a 随 t 的增大而增大 ,又因为 a 必须是 整数

所以

(1) b为奇数的时候  t = (b-1)/2;

(2) b 为 偶数 且 (b-2)/2 为偶数  ,那么t = (b-2)/2

(3)b 为 偶数且(b-2)/2 为奇数,那么 t = (b - 4)/2

//要注意用long long 否则会 WA。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main(){    long long a,b;    long long res;    int T;    scanf("%lld",&T);    while(T--){        scanf("%d",&b);        if(b%2==1){res=(b-1)/2;a=(long long)res*res/(b-2*res);}        else if(b%2==0&&((b-2)/2)%2==0){res=(b-2)/2;a=(long long)res*res/(b-2*res);}        else if(b%2==0&&((b-2)/2)%2==1){res=(b-4)/2;a=(long long)res*res/(b-2*res);}        printf("%lld\n",a);    }    return 0;}

0 0
原创粉丝点击