2064 最小平方数

2064 最小平方数

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
题目描述 Description

已知M^2  mod  10^x=N (x为N的位数),你能找到最小的M使式子成立吗?

输入描述 Input Description

一行,一个非负整数N。

输出描述 Output Description

输出1行,一个整数M,表示最小的M使M^2  mod  10^x=N。如果不存在M,则输出’None’。

样例输入 Sample Input

【样例输入1】

3

【样例输入2】

21

【样例输入3】

25

样例输出 Sample Output

【样例输出1】

None

【样例输出2】

11

【样例输出3】

5

数据范围及提示 Data Size & Hint

对于30%数据,N≤1000

对于100%数据,N≤1000000000,-10^9 ≤ x,y ≤ 10^9

分类标签 Tags 点此展开 

 
AC代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#define ll long long
using namespace std;
const int N=1e3+10;
char s[N];
int main(){
    scanf("%s",s+1);
    int len=strlen(s+1);//平方数的尾数不可能为2,3,7,8
    if(s[len]=='2'||s[len]=='3'||s[len]=='7'||s[len]=='8'){puts("None");return 0;}
    ll n=atoi(s+1),k=1,a=0;//最后一个点较大,要开long long 
    for(int i=1;i<=len;i++) k*=10;//10^k
    do{
        ll c=n+k*a;
        double r=sqrt(c);
        if(r==floor(r)){//第一个满足要求的点就是最小的m
            printf("%lld",(ll)r);return 0;
        }
        a++;//枚举
    }while(a<=(ll)len*10000000);//范围玄学 
    puts("None");
    return 0;
} 
原文地址:https://www.cnblogs.com/shenben/p/5923771.html