zoukankan      html  css  js  c++  java
  • HDU4143 A Simple Problem

    A Simple Problem

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 1959    Accepted Submission(s): 518


    Problem Description
    For a given positive integer n, please find the smallest positive integer x that we can find an integer y such that y^2 = n +x^2.
     
    Input
    The first line is an integer T, which is the the number of cases.
    Then T line followed each containing an integer n (1<=n <= 10^9).
     
    Output
    For each integer n, please print output the x in a single line, if x does not exit , print -1 instead.
     
    Sample Input
    2 2 3
     
    Sample Output
    -1 1
     
    /*
    解题思路:
    给定n,求最小的x使其满足 y^2 = n +x^2 ,分解因式可得(y-x)*(y+x)=n,枚举y-x即可,注意y-x一定小于y+x;
    */
    //代码一:
    #include<stdio.h>
    int main()
    {
    	int T,i,a,n,tmp,ans;
    	scanf("%d",&T);
    	while(T--)
    	{
    		ans=0x7fffffff;
    		scanf("%d",&n);
    		for(i=1;i*i<n;++i)
    		{
    			if(n%i==0)
    			{
    				a=n/i;
    				if(((a+i)&1)==0&&((a-i)&1)==0)
    				{
    					tmp=(a-i)>>1;
    					if(tmp<ans)
    						ans=tmp;
    				}
    			}
    		}
    		if(ans!=0x7fffffff)
    			printf("%d\n",ans);
    		else
    			printf("-1\n");
    	}
    	return 0;
    }
    
    
    /*
    代码二:---优化下:因为要满足x最小,则y-x与y+x要尽量接近,所以从sqrt(n)向前枚举的第一个满足条件的一定是最优解
    #include <stdio.h>
    #include <math.h>
    
    int main() 
    {
        int T,i,flag,n;
        scanf("%d",&T);
        while(T--)
        {
            flag=0;
            scanf("%d",&n);
            for(i=sqrt(n);i>=1;--i)
            {
                if(n%i==0&&(n/i-i)%2==0&&n/i!=i)
                {
                    flag=1;
                    break;
                }
            }
            if(flag)
                printf("%d\n",(n/i-i)/2);
            else
                printf("-1\n");    
        }
        return 0;
    }*/
    

      

    功不成,身已退
  • 相关阅读:
    TSQL(3)批处理
    TSQL(5)操作数据行
    如何设计数据库(1)?
    搜索引擎处理查询
    如何进行shell脚本正确性测试
    机房收费系统用户级别查询
    PageRank算法
    链接分析算法之:SALSA算法
    机器学习排序
    倒排索引搜索引擎的基石
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2684743.html
Copyright © 2011-2022 走看看