루오 구 P1217 회문 소수

루오 구 P1217 회문 소수

링크

https://www.luogu.org/problem/P1217

이름

제목 설명

151는 모두 소수 회문이다 (왼쪽 오른쪽 왼쪽에서 오른쪽으로 동일하다) 때문에 그렇게 151 회문 소수이다.

범위를 찾을 수있는 프로그램을 작성 [A, B] (5 <A <B <100,000,000) 모든 회문 기질 (일억).

입력 형식

1 호선 : 두 정수 a와 b.

출력 형식

출력 회문 소수, 한 줄에 하나의 목록입니다.

샘플 입출력

입력 # 1

5 500

출력 # 1

5
7
11
101
131
151
181
191
313
353
373
383

설명 / 팁

힌트 1 : 회문을 생성하고 소수 있는지.

팁 1 : 모든 회문을 찾아 그들이 (프라임) 질 수없는 경우 다음 결정합니다.

힌트 2 : 제대로 자리를 결합하여 회문를 생성합니다. 아래처럼 루프 중 하나 이상이 필요할 수 있습니다.

팁 2 : 당신은 다음과 같은 몇 가지 사이클을해야 할 수도 있습니다, 올바른 회문을 생산합니다.

NOCOW에서 제목 번역.

USACO 교육 1.5 절

회문 길이 5를 생성 :

for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数
     for (d2 = 0; d2 <= 9; d2++) {
         for (d3 = 0; d3 <= 9; d3++) {
           palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...)
         }
     }
 }

생각

설명은 직접 줄에 인코딩 보지 마십시오. 나는 LeetCode에 같은 제목,하지만 조금 더의 성능 요구 사항을했다. 요구 사항이, 소수, 회문으로 나눌 수 있습니다.

모든 심지어 비트 회문은, (11)에 의해 나눌 수 있습니다, 그것은, 그래서 판사가, 내가 원본을 사용할 수 있습니다 직접 후, 짝수, 소수 아닌 수 많은 무엇을 선별 할 수 있고 부분을 선별 할 수 있음을 증명했다 문자 처리는, 저 같은 비트의 발견 후, 배열을 교체하고 시작을 결정하고, 난 그냥 판사가 그 조건을 넣어 밀어을 할 회문 아무것도 회문하지 효율성 비율이 약간 높은 소수를 배치해야합니다.

코드

#include<iostream>
#include<cmath>
#include<cstring>

using namespace std;

//质数 
bool isPrime(int i)
{
    for (int j = 2; j <= sqrt(i); j++)
        if (i % j == 0) 
            return false;
    return true;
}

//回文 
bool isHui(int s)
{
    if((s>=1000 && s<10000)|| (s>=100000 && s<1000000) || (s>=10000000 && s<100000000))
        return false;
    
    int a[10],i=0;
    while(s>0)
    {
        a[i]=s%10;
        s=s/10;
        i++;
    }
    for(int j=0;j<i/2+1;j++)
    {
        if(a[j]!=a[i-j-1])
            return false;
    }
    return true;
}
    
int main()
{
    int a,b;
    cin>>a>>b;
    for(int i=a;i<=b;i++)
    {
        if(i%2==0)
            continue;
        if(isHui(i) &&isPrime(i))
            cout<<i<<endl;
    }
    return 0;
}
  

추천

출처www.cnblogs.com/blogxjc/p/11375152.html