信息學奧賽C++語言: 區間內的真素數

【題目描述】
找出正整數M和N之間(N不小於M)的所有真素數。 例如,11,13均爲真素數,因爲11的反序還是爲11,13的反序爲31也爲素數。 真素數的定義:如果一個正整數P爲素數,且其反序也爲素數,那麼P就爲真素數

【輸入】
輸入兩個數M和N,空格間隔,1≤M≤N≤100000。

【輸出】
按從小到大輸出M和N之間(包括M和N)的真素數,逗號間隔。如果之間沒有真素數,則輸出No

【輸入樣例】
10 35

【輸出樣例】
11,13,17,31

代碼

#include<cstdio>
#include<cmath>
using namespace std;
bool c(int x);
int b(int n);
int a[100000],m,n,i,k;
bool flag=false;
int main()
{
    scanf("%d%d",&m,&n);
    for(i=m; i<=n; i++) 
        if(c(i)&&c(b(i)))
        {
            k++;
            a[k]=i;
            flag=true;
        }
    if(flag)
    {
        for(i=1; i<k; i++)
            printf("%d,",a[i]);
        printf("%d",a[k]);
    }
    else
        printf("No\n");
    return 0;
}
bool c(int x)
{
    int i=2;
    if(x==0||x==1)
	return false;
    while( i<=floor(sqrt(x))&&(x%i!=0))
    i++;
    if(i>floor(sqrt(x)))
    return true;
    return false;
}
 
int b(int n)
{
    int sum=0;
    while(n>0)
    {
        sum=sum*10+n%10;
        n/=10;
    }
    return sum;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章