题目描述 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; }