zoukankan      html  css  js  c++  java
  • 解方程 sqrt(x-sqrt(n))+sqrt(y)-sqrt(z)=0的所有自然数解

     解方程

    小象同学在初等教育时期遇到了一个复杂的数学题,题目是这样的:

    给定自然数 nn,确定关于 x, y, zx,y,z 的不定方程 displaystyle sqrt{x - sqrt{n}} + sqrt{y} - sqrt{z} =0xn+yz=0 的所有自然数解。

    当时的小象同学并不会做这道题。多年后,经过高等教育的洗礼,小象同学发现这道题其实很简单。小象同学认为你一定也会做这道题,所以把这道题留给了你。为了便于输出,你不需要输出每一组解 (x, y, z)(x,y,z),你只需要给出解的数量和所有解的 x y zxyz 之和对 (10^9+7)(109+7) 取模的值即可。注意,解的数量不对 (10^9+7)(109+7) 取模。

     
     

    输入描述

     

    输入包含多组测试数据。输入的第一行包含一个正整数 TT (1 leq T leq10^41T104),表示测试数据的组数。接下来依次描述每组测试数据,对于每组测试数据:

    仅一行,包含一个非负整数 nn (0 leq n leq 2 imes 10^90n2×109),含义如题面所示。

    输出描述

     

    对于每组数据,输出一行。若方程有无穷多组自然数解,则在这一行输出  ext{``infty''}“infty”(不含引号),否则在这一行输出两个整数,其中第一个整数表示方程的解数,第二个整数表示所有解的 x y zxyz 之和对 (10^9+7)(109+7) 取模的值,这两个整数之间用恰好一个空格隔开,行末不要有多余的空格。

    样例输入 1 

    3
    6
    12
    24
    

    样例输出 1

    0 0
    1 12
    2 72
    

    提示

    当 n = 12n=12 时,方程唯一的解为 x = 4x=4, y = 1y=1, z = 3z=3。

    当 n = 24n=24 时,方程的两组解为 x = 5x=5, y = 2y=2, z = 3z=3 和 x = 7x=7, y = 1y=1, z = 6z=6。

    可以通过化简(移项,平方)得到 x=z+y,n=4zy

    无解就是不为整数

    但是什么时候存在无穷解呢,x=sqrt(n),y,z就可以无限取了,其实就是完全平方数

    注意下sqrt向下取整的细节,然后把自己代码常数写的小一点就可以了

    关于强制转换,只要有一个是位数更多的,得到的就是位数更多的,然后注意不要溢出就好了

    #include<bits/stdc++.h>
    using namespace std;
    const int MD=1e9+7;
    int main()
    {
        int T,n;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            int x=sqrt(n+0.5);
            if(x*x==n)printf("infty
    ");
            else if(n%4) printf("0 0
    ");
            else 
            {
                n/=4;
                int y=sqrt(n+0.5);
                int num=0,ans=0;
                for(int i=1;i<=y;i++)
                    if(n%i==0) ans=(ans+1LL*n*(i+n/i))%MD,num++;
                printf("%d %d
    ",num,ans);
            }
        }
        return 0;
    }

    积性函数解法,51nod1220请,这个还不会

  • 相关阅读:
    Python接入支付宝进行PC端支付
    python3.6安装pycrypto,pycrytodome和crypto
    Redis
    python时区设置——pytz模块
    redis介绍以及安装
    转译符,re模块,random模块
    正则表达式
    走进模块
    面向对象进阶
    pycharm快捷键
  • 原文地址:https://www.cnblogs.com/BobHuang/p/10634350.html
Copyright © 2011-2022 走看看