数论-整数对

整数对

考虑一个不含前导零的正整数X,把它去掉一个数字以后得到另一个数Y。输入X+Y的值N(1<=N<=10^9),输出所有可能的等式X+Y=N。例如N=34有两个解:31+3=34;27+7=34。
思路:
1.记N的10进制表示形式的长度为L.
2.设从x右边数的第i(0<=i<L)位删除数字d(0<=d<10)得到Y(如图)
在这里插入图片描述

3.记X=a10(i+1)+d10i+b,(b<10i),则Y=a10i+b,且X+Y=N;由此可得11a10i+d10^i+2b=N;
4.遍历所有的i和d;
5.固定i和d之后,求不定方程11a10i+2b=N-d10i,所有满足0<a<10i且0<=b<10^i(注意当i=L-1时,a恒等于0)整数解(a,b)并带入3中解出X,Y即可。

#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int main()
{
    int N;
    cin>>N;
    int L=0,tem=N;
    while (tem)
    {
        L++;
        tem/=10;
    }
     for (int i=0;i<L;i++ )
     {
         for (int d=0;d<10;d++ )
         {
             for (int b=0;b<pow(10,i);b++ )
             {
               if((int)(N-d*pow(10,i)-2*b)%(11*(int)pow(10,i))==0)
               {
                   int a=(N-d*(int)pow(10,i)-2*b)/(11*pow(10,i));
                    if(i==L-1)
                    {
                        a=0;
                        cout<<"X:"<<a*pow(10,i+1)+d*pow(10,i)+b<<"Y:"<<a*pow(10,i)+b<<"\n";
                    }
                    else
                    {
                        if(a>0)
                        {
                          cout<<"X:"<<a*pow(10,i+1)+d*pow(10,i)+b<<"Y:"<<a*pow(10,i)+b<<"\n";
                        }
                    }
               }
             }
         }
     }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《初等数论及其应用》是一本关于数论的教材,介绍了数论的基本概念、定理和证明方法,并探讨了数论在实际问题中的应用。 数论是数学的一个分支,研究整数的性质和规律。《初等数论及其应用》首先介绍了整数、素数、最大公因数和最小公倍数等基本概念。然后讨论了素数的性质,包括素数的无穷性、素数分布的规律和素数定理等。接着介绍了数论中的重要定理,如费马小定理、欧拉定理和中国剩余定理等,以及它们的证明方法。此外,书中还包含了一些经典的数论问题和解法,如高斯平方和、尼科彻斯定理和无穷数列求和等。 除了介绍基本概念和定理外,该书还强调了数论在密码学、编码理论和计算机科学等领域中的应用。其中,密码学是数论的一个重要应用方向,通过利用数论中的一些难题和性质,可以设计出安全可靠的密码算法。此外,编码理论是应用数论研究信号编码和纠错编码的一门学科,数论中的一些技术和方法对编码理论的研究具有重要意义。计算机科学领域也广泛应用了数论中的一些概念和方法,如素数测试、大整数运算和随机数生成等。 总之,《初等数论及其应用》是一本系统介绍数论基本概念、定理和应用的教材。通过学习该书,读者可以了解数论的基础知识,掌握数论的基本方法和证明技巧,并了解数论在实际问题中的广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值