列表

详情


QY6. 回文素数

描述

如果一个整数只能被1和自己整除,就称这个数是素数。
如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666
如果一个数字既是素数也是回文数,就称这个数是回文素数
牛牛现在给定一个区间[L, R],希望你能求出在这个区间内有多少个回文素数。

输入描述

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

输出描述

输出一个整数,表示区间内回文素数个数。

示例1

输入:

100 150

输出:

2

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 236KB, 提交时间: 2019-06-11

#include <stdio.h>

int main()
{
    int L = 0, R = 0;
    int i,j,tag = 0;
    int num = 0;
    scanf("%d",&L);
    scanf("%d",&R);
    for(i = L;i<=R;i++)
    {
        tag = 0;
        for(j = 2;j < i;j++)
        {
            if(i % j == 0)
            {
                tag = 1;
                break;
            }
        }
        if(tag == 0)
        {
            if(i<10)num++;
            else if(i>=10&&i<100)
            {
                if(i/10 == i%10)num++;
            }
            else if(i>=100&&i<1000)
            {
                if(i/100 == i%10)num++;
            }
        }
    }
    if(L == 1)num--;
    printf("%d",num);
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 248KB, 提交时间: 2019-11-15

#include<stdio.h>
int main()
{
    int L=0,R=0,count=0,ans=0;
    scanf("%d %d",&L,&R);
    for(int i=L;i<=R;i++)
    {
        int num=i,j;
        for(j=0;;j++)//算几位数
        {
            num=num/10;
            if(num==0)
            {
                break;
            }
        }
        if(j==2)//三位数
        {
            if((i/100)==(i%10))//百位与个位相同 
            {
                 int count=0;
                 for(int k=2;k<i+1;k++)
                 {
                     if((i%k)==0)
                     {
                         count++;
                     }
                 }
                 if(count==1)
                 {
                     ans++;
                 }
            }
        }
        else if(j==1)//两位数
        {
            if((i/10)==(i%10))//十位与个位相同 
            {
                 int count=0;
                 for(int k=2;k<i+1;k++)
                 {
                     if((i%k)==0)
                     {
                         count++;
                     }
                 }
                 if(count==1)
                 {
                     ans++;
                 }
            }
        }
        else if(j==0)//一位数
        {
             int count=0;
             for(int k=2;k<i+1;k++)
             {
                 if((i%k)==0)
                 {
                     count++;
                 }
             }
             if(count==1)
             {
                 ans++;
             }
        }
    }
    printf("%d",ans);
}

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-10

#include <stdio.h>
#include <stdbool.h>
#include <math.h>

bool ss(int num)
{
    if(num<2)
        return false;
    int i;
    for(i=2;i<=sqrt(num);i++)
    {
        if(num%i==0)
            return false;
    }
    return true;
}

bool hw(int num)
{
    int n=num,sum=0;
    while(n!=0)
    {
        sum=sum*10+n%10;
        n/=10;
    }
    if(num==sum)
        return true;
    return false;
}

int main()
{
    int L,R;
    while(scanf("%d %d",&L,&R)!=EOF)
    {
        int i,sum=0;
        for(i=L;i<=R;i++)
            if(ss(i)&&hw(i))
                sum++;
        printf("%d\n",sum);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2021-09-17

#include<stdio.h>
int fact(int n)
{
    int i;
    if(n==1) return 0;
    else
    {
        for(i=2;i<n;i++)
        {
            if(n%i==0) return 0;
        }
        return 1;
    }
}
int fact2(int n)
{
	int sum=0,t,n_;
	n_=n;
	while (n)
	{
		sum*=10;
		t=n%10;
		sum+=t;
		n/=10;
	}
	if(sum==n_) return 1;
	else return 0; 
}
int main()
{
    int a,b;
    while (scanf("%d %d",&a,&b)!=EOF)
    {
        int i,c=0;
        for(i=a;i<=b;i++)
        {
            if(fact(i)==1&&fact2(i)==1) c++;
        }
        printf("%d\n",c);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2022-03-08

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int state1(int x)
{
    if(x==1)
        return 0;
int i,j;
    for(i=2;i<x;i++)
        if(x%i==0)
            break;
    if(i<x)
        return 0;
    else
        return 1;
}
int state2(int x)
{
    int num=0;
    int a[10000],i;
    i=0;
    while(x)
    {
        a[i++]=x%10;
        x/=10;
          }
    num=i;
   for(i=0;i<num;i++)
       if(a[i]!=a[num-1-i])
           break;
    if(i<num)
        return 0;
    else 
        return 1;
}
int main()
{
    int i,j,m,n,num=0;
    scanf("%d %d",&m,&n);
    for(i=m;i<=n;i++)
    {
        if((state1(i)==1)&&(state2(i)==1))
            num++;
}
    printf("%d",num);
    return 0;
    
}

上一题