首页 > 试题广场 >

回文素数

[编程题]回文素数
  • 热度指数:222 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
如果一个整数只能被1和自己整除,就称这个数是素数。
如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666
如果一个数字既是素数也是回文数,就称这个数是回文素数
牛牛现在给定一个区间[L, R],希望你能求出在这个区间内有多少个回文素数。

输入描述:
输入包括一行,一行中有两个整数(1 ≤ L ≤ R ≤ 1000)


输出描述:
输出一个整数,表示区间内回文素数个数。
示例1

输入

100 150

输出

2
求解答?为什么在本地可以通过,在牛客只能通过百分之70.  1,9这个例子无法通过,但是本地是对的。
#include<bits/stdc++.h>
using namespace std;
 
bool isshu(int n)
{
   if(n==1)
       return true;
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
            return false;
         
    }
    return true;
}
bool huiwen(int n)
{
   int newnum=0;
    int tem=n;
    while(n>0)
    {
        newnum=newnum*10+n%10;
        n=n/10;
    }
    return tem==newnum?true:false;
}
 
 
int main()
{
    int L,R;
    cin>>L>>R;
    int count=0;
    for(int i=L;i<=R;i++)
    {
        if(huiwen(i)&&isshu(i))
        {
         count++;
        }
    }
    cout<<count<<endl;
     
    return 0;
}

发表于 2018-08-15 21:02:25 回复(1)
#include <iostream>
#include <string>
usingnamespacestd;
 
boolis_hw(inti)
{
     
        if(i<0|| (i!=0 &&i%10==0))
            returnfalse;
        intsum=0;
        while(i>sum)
        {
            sum = sum*10+i%10;
            i = i/10;
        }
        return(i==sum)||(i==sum/10);
    
}
boolis_ss(inti)
{
    if(i==1)
        returnfalse;
    if(i==2)
        returntrue;
    for(intj=2;j<i-1;j++)
    {
        if(i%j==0)
            returnfalse;
        if(j==i)
            returntrue;
    }
    return-1;
}
intmain ()
{
    intL,R;
    intnum(0);
    cin>>L>>R;
    for(inti=L;i<=R;i++)
    {
        if(is_hw(i))
            if(is_ss(i))
                {
                num++;
         
                }
        continue;
     
    }
    cout<<num<<endl;
     
    system("pause");
}
发表于 2018-04-19 12:09:11 回复(0)
#include <iostream>
#include <string>
#include <sstream>
#include <math.h>
 
using namespace std;
 
inline bool isPrime(int n) {
    if(n <= 1)
        return false;
    int num = ::sqrt(n);
    for(int i = 2;i <= num;++i) {
        if(n % i == 0)
            return false;
    }
    return true;
}
 
inline bool isPlalindrome(int i) {
    string num_str;
    stringstream ss;
    ss << i;
    ss >> num_str;
    int len = num_str.size();
    for(int i = 0; i < len/2;++i) {
        if(num_str[i] != num_str[len - 1 - i])
            return false;
    }
    return true;
}
 
int getResult(int l,int r) {
    int count = 0;
    for(int i = l; i <= r;++i) {
        if(isPrime(i) && isPlalindrome(i)) {
            count++;
        }
    }
    return count;
}
 
int main() {
    int L,R;
    while(cin>>L>>R) {
        int count = getResult(L,R);
        cout<<count<<endl;
    }
}
编辑于 2018-04-13 19:49:02 回复(0)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    int L,R,n,num=0;
    cin>>L>>R;
    for(n=L;n<=R;n++)
    {
        bool flag=true;
        for(int i=2;i<sqrt(n)+1;i++)//判断是否为素数
        {
            if(n%i==0)
            {
                flag=false;;
            }
        }
        string str=to_string(n);//判断是否回文
        string strReverse=str;
        reverse(str.begin(),str.end());
        if(str==strReverse&&flag==true)
        {
            num++;
        }
    }
    cout<<num<<endl;
    return 0;
}

发表于 2018-03-06 17:57:42 回复(0)
#include <iostream>
#include <math.h>
using namespace std;
int isSushu(int n)
{
 //int x = n;
 for (int i = 2; i <= sqrt(n); ++i)
 {
  if (n % i == 0)
   return 0;
 }
 return 1;
}
int isReverse(int n)
{
 int c, t = 0;
 c = n;
 while (c)
 {
  t *= 10;
  t += c % 10;
  c /= 10;
 }
 if (t == n)
  return 1;
 return 0;
}


int main()
{
 int count = 0;
 int L, R;
 cin >> L >> R;
 for (int i = L; i <= R; ++i)
 {
  if (isReverse(i) && isSushu(i))
  {
   count++;
  // cout << "回文素数:" << i << endl;
  }
 }
 if (L == 1)
 {
  cout << count-1 << endl;
 }
 else{
  cout << count << endl;
 }
 
 system("pause");
 return 0;
}
发表于 2017-12-29 14:44:06 回复(0)