完全平方回文数--回文数个数--素数回文数
(2018-09-11 14:00:14)分类: 函数,穷举 |
一)326.完全平方回文数
给定一个十进制自然数的范围和进制的范围,十进制自然数范围在1~44700之间,是m*m形成的平方数,进制的范围在2~36之间。给定范围里的数中,有些数的平方,在某进制下既是完全平方数,又是回文数。本题的任务是统计给定范围内有多少个数的平方满足下列条件;仅在某一进制下既是完全平方数又是回文数。
说明:3^2=9,因为它在十进制和十一进制中都是回文数,所以9不能算;同样,26^2=676也不算。
输入格式:一行四个整数,分别表示给定的十进制自然数m的范围和进制的范围。
输出格式:一行一个正整数,青示给定范围内满足条件的数的个数。
输入样例:
1 100 9 11
输出样例:
12
样例说明:
6^2=36=33 base 11;
10^2=100=121 base 9;
11^2=121=121 base 10;
12^2=144=121 base 11
20^2=400=484 base 9;
22^2=484=484 base 10;
24^2=576=484 base 11;
72^2=5184=3993 base 11;
82^2=6724=10201 base 9;
84^2=7056=5335 base 11;
91^2=8281=12321 base 9;
100^2=10000=1464 base 9
using namespace std;
bool judge(int x,int k) {
int
top=0,s[100000];
do{
s[top++]=x %
k;
x/=k;//兼容不同进制
}while
(x!=0);
//转成高精度形态。用数组装数字,以便判断是否回文数;
for (int
i=0;i
if
(s[i]!=s[top-i-1]) return false;
return
true;
}
int main() {
int m1,m2,n1,n2;
cin>>m1>>m2>>n1>>n2;
int ans=0;
for (int i=m1;i<=m2;i++)
{
int
x=i*i;
int
count=0;
for (int
k=n1;k<=n2;k++) {
if
(judge(x,k)) count++;
if (count
> 1) break;//多于一个,不能算。
}
if
(count==1) ans++;
}
cout<<ans;
return 0;
}
二)
不超过n位的正整数中,有多少个回文数?
输入 一个正整数n,n
<= 10。
输出
一个整数,即回文数个数。
样例输入
5
样例输出
1098
问题解析:这道题可以用作回文函数练习,不过,那样的话速度会偏慢。
n位正整数中回文数有9乘10的(n-1)/2次方个,
比如n=1的时侯,答案是9; n=2的时侯,答案是9+9=18,
n=3的时侯,90+18=108
根据这条公式,可以有下面的解法:
using namespace std;
int n,b,i,j,s[10],sum;
int fn(int n) // 递归
{
if(n==0)
return 0; //n位正整数中回文数有9乘10的(n-1)/2次方个
b=(n-1)/2;
return
s[b]+fn(n-1);
}
int main() //这个程序可以求不超过n位的正整数中回文数的个数(n<=10)
{
cin>>n;
s[0]=9;
for(i=1;i<=n;i++) //生成一个10、10^2、10^...的数组
s[i]=s[i-1]*10;
printf("%d",fn(n));
}
三)openjudge素数回文数的个数
求11到n之间(包括n),既是素数又是回文数的整数有多少个。
输入
一个大于11小于1000的整数n。
输出
11到n之间的素数回文数个数。
样例输入
23
样例输出
1
using namespace std;
int prime(int n){
int i;
if(n<=1)
return 0;
for(i=2;
i<=n/2;i++)
if(!(n % i)) return 0;
return
1;
}
int inv(int n){
int
x=0;
while(n){
(x*=10) += n % 10;
n/=10;
}
return
x;
}
int main(){
int
m,n;
scanf("%
d",&n);
int
sum =0;
for(int
i=11;i<=n;i++)
if(prime(i) && inv(i)==i)
{
给定一个十进制自然数的范围和进制的范围,十进制自然数范围在1~44700之间,是m*m形成的平方数,进制的范围在2~36之间。给定范围里的数中,有些数的平方,在某进制下既是完全平方数,又是回文数。本题的任务是统计给定范围内有多少个数的平方满足下列条件;仅在某一进制下既是完全平方数又是回文数。
说明:3^2=9,因为它在十进制和十一进制中都是回文数,所以9不能算;同样,26^2=676也不算。
输入格式:一行四个整数,分别表示给定的十进制自然数m的范围和进制的范围。
输出格式:一行一个正整数,青示给定范围内满足条件的数的个数。
输入样例:
1 100 9 11
输出样例:
样例说明:
6^2=36=33 base 11;
10^2=100=121 base 9;
11^2=121=121 base 10;
12^2=144=121 base 11
20^2=400=484 base 9;
22^2=484=484 base 10;
24^2=576=484 base 11;
72^2=5184=3993 base 11;
82^2=6724=10201 base 9;
84^2=7056=5335 base 11;
91^2=8281=12321 base 9;
100^2=10000=1464 base 9
using namespace std;
bool judge(int x,int k) {
}
int main() {
}
二)
输入
输出
样例输入
样例输出
问题解析:这道题可以用作回文函数练习,不过,那样的话速度会偏慢。
n位正整数中回文数有9乘10的(n-1)/2次方个,
比如n=1的时侯,答案是9; n=2的时侯,答案是9+9=18,
n=3的时侯,90+18=108
根据这条公式,可以有下面的解法:
using namespace std;
int n,b,i,j,s[10],sum;
int fn(int n) // 递归
{
}
int main() //这个程序可以求不超过n位的正整数中回文数的个数(n<=10)
{
}
三)openjudge素数回文数的个数
输入
输出
样例输入
样例输出
using namespace std;
int prime(int n){
}
int inv(int n){
int main(){