[呱一题] 证明每一位都相同的十进制数不是完全平方数

·  阅读 471

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

题意

Description

相信大家都做过"A+B Problem"了吧,这道题是它的加强版。

输入两个整数A,BA,B,表示AABB,例如3,63,6 表示666666。你只需要把“A个B”开根号。如果开根号后是个整数,输出开根后的数,否则输出“We donot have SPJ!”

题目链接

解题思路

很显然,这题就是让我们判断“A个B”是不是完全平方数,我们从感觉上判断,形如666666666\cdots666这样的数,一般来说都不是完全平方数,现在我们来证明一下。

证明

B=0B=0时,答案显然是00

接下来我们考虑B>0B>0的情况:

A=1A=1时,只有B=1,4,9B=1,4,9有解。

A=2A=2时,可以用枚举法得出无解。

A3A\geq3时:

首先,能在开根号后是整数的,一定是完全平方数,

显然,对于任意完全平方数x2x^2,有:

x20,1mod4x^2 \equiv0,1\quad mod \quad 4

对于一个3位以上的数,我们可以把它拆分成100a+b100 \cdot a+b其中,bb是一个两位数。显然:

100a0mod4100a+bbmod4100 \cdot a \equiv 0 \quad mod \quad 4\\ 100 \cdot a +b \equiv b \quad mod \quad 4

那么对于“AA1,5,91,5,9”,有

11113mod455553mod499993mod41\cdots1 \equiv 11 \equiv3 \enspace mod \enspace 4\\ 5\cdots5 \equiv 55 \equiv3 \enspace mod \enspace 4\\ 9\cdots9 \equiv 99 \equiv3 \enspace mod \enspace 4\\

对于“AA2,62,6”,有

22222mod466662mod42\cdots2 \equiv 22 \equiv2 \enspace mod \enspace 4\\ 6\cdots6 \equiv 66 \equiv2 \enspace mod \enspace 4\\

所以上述情况不是完全平方数。

对于一个偶完全平方数4k24 \cdot k^2,显然其除以44后仍然是完全平方数,而

444=11884=22\frac{4\cdots4}{4}=1\cdots1\\ \frac{8\cdots8}{4}=2\cdots2

均不是完全平方数,故对于“AA4,84,8”不是完全平方数。

对于3,73,7,我们考虑,一个完全平方数x2x^2,有:

x0,1,2,3,4mod5x20,1,4mod5x\equiv 0,1,2,3,4\enspace mod\enspace5\\ x^2\equiv 0,1,4 \enspace mod \enspace 5

而:

33333mod577772mod53\cdots3 \equiv 33 \equiv3 \enspace mod \enspace 5\\ 7\cdots7 \equiv 77 \equiv2 \enspace mod \enspace 5\\

故对于“AA3,73,7”不是完全平方数。

所以对于任意三位数及以上的的"A个B",其必定不是完全平方数。

代码

// by Concyclics
//
//
#include <iostream>
using namespace std;
int main()
{
    int A,B;
    cin>>A>>B;
    if(B==0)
    {
        puts("0");
        return 0;
    }
    
    if(A==1)
    {
        if(B==1)
        {
            puts("1");
            return 0;
        }
        if(B==4)
        {
            puts("2");
            return 0;
        }
        if(B==9)
        {
            puts("3");
            return 0;
        }
    }
    puts("We donot have SPJ!");
    return 0;
}


分类:
代码人生
标签:
分类:
代码人生
标签:
收藏成功!
已添加到「」, 点击更改