zoukankan      html  css  js  c++  java
  • hdu 4143

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4143

    思路:变方程为n=(y-x)*(y+x)(n>0);令y-x=i,于是有y+x=n/i;从而联立不等式可求的x=(n/i-i)/2(x>0);从而i<=sqrt(n);枚举即可。

    View Code
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 using namespace std;
     6 
     7 int main(){
     8     int _case,flag,n;
     9     scanf("%d",&_case);
    10     while(_case--){
    11         scanf("%d",&n);
    12         flag=false;
    13         for(int i=(int)sqrt(n*1.0);i>=1;i--){
    14             if(n%i==0&&(n/i-i)%2==0){
    15                 int x=(n/i-i)/2;
    16                 if(x>0){flag=true;printf("%d\n",x);break;}
    17             }
    18         }
    19         if(!flag)puts("-1");
    20     }
    21     return 0;
    22 }
  • 相关阅读:
    Bessie Goes Moo
    小P的强力值
    Max Flow
    约瑟夫
    Moocryption
    杂务
    排行榜
    银行贷款
    轰炸
    Contaminated Milk
  • 原文地址:https://www.cnblogs.com/wally/p/3060554.html
Copyright © 2011-2022 走看看