NC22897. 回文平方数
描述
输入描述
共一行,一个单独的整数B(B用十进制表示)。
输出描述
每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。
示例1
输入:
10
输出:
1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 400K, 提交时间: 2022-11-30 19:22:22
#include <iostream> #include <string> using namespace std; char base[]="0123456789ABCDEFGHIJ"; string trans(int a,int b) { string ans=""; while(a>0) { ans=base[a%b]+ans; a/=b; } return ans; } bool check(string s) { int len=s.length(); for(int i=0;i<=len/2;i++) { if(s[i]!=s[len-1-i]) { return false; } } return true; } int main() { int b,a; string s; cin>>b; for(int i=1;i<=300;i++) { a=i*i; s=trans(a,b); if(check(s)) cout<<trans(i,b)<<" "<<s<<endl; } return 0; }
C++(clang++11) 解法, 执行用时: 8ms, 内存消耗: 392K, 提交时间: 2021-02-17 20:25:47
#include<bits/stdc++.h> using namespace std; int b; char get(int x){ if(x<=9){ return x+'0'; } else{ return x-10+'A'; } } string base(int n,int b){ string res; while(n){ res+=get(n%b); n/=b; } reverse(res.begin(),res.end()); return res; } bool check(string s){ for(int i=0,j=s.size()-1;i<j;i++,j--){ if(s[i]!=s[j]){ return false; } } return true; } int main(){ cin>>b; for(int i=1;i<=300;i++){ string num=base(i*i,b); if(check(num)){ cout<<base(i,b)<<" "<<num<<endl; } } }
Python3(3.9) 解法, 执行用时: 23ms, 内存消耗: 2832K, 提交时间: 2021-05-11 22:57:46
b = int(input()) m = '0123456789ABCDEFGHIJK' def f(p): res = '' while p != 0: res = m[p % b] + res p //= b return res def isPrime(s): n = len(s) for i in range(n//2): if s[i] != s[n-1-i]: return False return True for i in range(1, 301): p = f(i ** 2) if isPrime(p): print(f(i), p)