zoukankan      html  css  js  c++  java
  • 【Comet OJ

    点此看题面

    大致题意: 给定自然数(n),让你求出方程(sqrt{x-sqrt n}+sqrt y-sqrt z=0)的自然数解(x,y,z)的数量以及所有解(xyz)之和。

    推式子

    这道题应该不是很难。

    移项可以得到:

    [sqrt{x-sqrt n}=sqrt z-sqrt y ]

    两边同时平方:

    [x-sqrt n=y+z-2sqrt {yz} ]

    则我们可以得出第一个结论:

    (n)为完全平方数,即(sqrt n)为整数时,有无数组解,直接输出(infty)

    否则,我们可知:

    [egin{cases}x=y+z,&①\sqrt n=2sqrt{yz}&②end{cases} ]

    其中,对于(②)式,我们再同时平方得到:

    [n=4yz ]

    有了这个式子,加上前面(①)式中得出的(x=y+z),我们就可以轻松得出结论:

    (n)不为(4)的倍数,则无解,直接输出"0 0"。

    否则的话,我们就(O(frac{sqrt n}2))枚举(y)(由原式易知(y<z)),然后就可以求出答案了。

    具体实现详见代码。

    代码

    #include<bits/stdc++.h>
    #define Tp template<typename Ty>
    #define Ts template<typename Ty,typename... Ar>
    #define Reg register
    #define RI Reg int
    #define Con const
    #define CI Con int&
    #define I inline
    #define W while
    #define X 1000000007
    #define Inc(x,y) ((x+=(y))>=X&&(x-=X))
    using namespace std;
    int n;
    int main()
    {
    	RI Ttot,i,ans1,ans2;scanf("%d",&Ttot);W(Ttot--)
    	{
    		if(scanf("%d",&n),(int)sqrt(n)*(int)sqrt(n)==n) {puts("infty");continue;}//若n为完全平方数,有无数组解
    		if(n%4) {puts("0 0");continue;}//若n不为4的倍数,无解
    		for(n/=4,ans1=ans2=0,i=1;1LL*i*i<=n;++i) !(n%i)&&(++ans1,Inc(ans2,1LL*n*(i+n/i)%X));//枚举y,统计答案
    		printf("%d %d
    ",ans1,ans2);//输出
    	}return 0;
    }
    
  • 相关阅读:
    Apache ab 压力并发测试工具
    php面试题五之nginx如何调用php和php-fpm的作用和工作原理
    你确定你真的懂Nginx与PHP的交互?
    Linux基本的操作
    【阿里巴巴:高并发的背后】数据库规范
    str()函数
    zfill()方法
    upper()方法
    translate()方法
    title()方法
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/CometOJContest0A.html
Copyright © 2011-2022 走看看