现在给出一个n,你要找出1-n之间的特殊回文素数个数 这个特殊回文素素数满足三点:
1、 只由1-9组成,并且每个数最多不出现k次,如13,23,1289。
2、 位数从高到低为不严格递减或不严格递增(即带等于的关系)。
3、 要求数字为回文数。
4、 数字为素数(质数)。
请你判断一下,这个素数的回文数是否为素数(13的回文数是131,127的回文数是12721)。
输入描述:
输入一行n,k(1 <= n <= 1e3 ,1 <= k <= 2)
输出描述:
输出一行答案为特殊回文素数个数
示例1 输入 复制 5 1 输出 复制 3 说明 2,3,5为回文素数,且每个数均出现一次
所谓回文素数指的是,对一个整数n从左向右和从右向左读其数值都相同且n为素数,则称整数为回文素数。
对于偶数位的整数,除了11以外,都不存在回文素数。即所有的4位整数、6位整数、 8位整数…都不存在回文素数。下面列出两位和三位整数中包含的所有回文素数。
两位回文素数:11
三位回文素数:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929三位的回文素数都不满足题意说的严格递增,严格递减 //我理解错题意了,我把1-n的素数找到,又按照题上这句话找到素数的回文数,又去判断这个回文数是不是特殊回文数,还不如没有。
//方法二 n<10 回文素数有4个
// 10<=n<=100 回文素数有1个 11
// n>100 3位回文数15个
#include <iostream>
using namespace std;
int main()
{
int n,k,ans=0;
cin>>n>>k;
if(n>=2) ans++;
if(n>=3) ans++;
if(n>=5) ans++;
if(n>=7) ans++;
if(n>=11&&k==2) ans++;
//三位回文素数:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929
//三位的回文素数都不满足不严格递增或不严格递减
cout<<ans;
return 0;
}
#include <iostream>
using namespace std;
int a(int n,int k) //判断出现的次数
{
if(n<10) return 1;
else if(n<100) {
int cnt1=n%10,cnt2=n/10;
if(k==1&&cnt1==cnt2) return 0;
return 1;
}
else {
int cnt1=n%10,cnt2=n/10%10,cnt3=n/100;
if(k==1&&(cnt1==cnt2||cnt2==cnt3||cnt1==cnt3)) return 0;
else if(k==2&&cnt1==cnt2&&cnt2==cnt3) return 0;
return 1;
}
}
int b(int n) //判断不严格递增或不严格递减
{
if(n<100) return 1;
else {
int cnt1=n%10,cnt2=n/10%10,cnt3=n/100;
if(cnt1<=cnt2&&cnt2<=cnt3||cnt1>=cnt2&&cnt2>=cnt3) return 1;
return 0;
}
}
int c(int n) //判断回文
{
if(n<10) return 1;
else if(n<100) {
int q=n%10,w=n/10;
if(q==w) return 1;
return 0;
}
else {
int cnt1=n%10,cnt2=n/10%10,cnt3=n/100;
if(cnt1==cnt3) return 1;
return 0;
}
}
int d(int n) //判断素数
{
if(n<2) return 0;
else if(n==2) return 1;
else
{
for(int i=2;i*i<=n;i++)
if(n%i==0) return 0;
}
return 1;
}
int main()
{
int n,k,ans=0;
cin>>n>>k;
for(int i=1;i<=n;i++) {
if(a(i,k)&&b(i)&&c(i)&&d(i)){
ans++;
// cout<<i<<endl;
}
}
cout<<ans;
return 0;
}
print('Hello world!')