66分求调。(我不会打表,算法,素数筛法)

P1217 [USACO1.5] 回文质数 Prime Palindromes

wangxiangquan @ 2024-08-07 18:26:44

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long a,b,f;
    scanf("%lld %lld",&a,&b);
    if(a%2==0) a++;
    for(int i=a;i<=b;i+=2)
    {
        f=1;
        if(i%2==0) continue;
        for(int j=2;j<=sqrt(i);j++)
        {
            if(i%j==0)
            {
                f=0;
                break;
            }
        }
        if(f==1)
        {
            int s=0,x=i;
            while(x!=0)
            {
                s=s*10+x%10;
                x=x/10;
            }
            if(s==i) printf("%d\n",i);
        }
    }
    return 0;
}

by Libingyue2011 @ 2024-08-09 08:07:44

Hint 1: Generate the palindromes and see if they are prime.

提示 1: 找出所有的回文数再判断它们是不是质数(素数).

产生长度为 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;//(处理回文数...)
         }
     }
 }

by Libingyue2011 @ 2024-08-09 08:08:40

@wangxiangquan


by shuaideiyibi666 @ 2024-08-09 16:51:57

#include<iostream>
#include<math.h> 
using namespace std;
bool sushu(long long int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0) return 0;

    }
     return 1;
}
int main(){
    long long int a,b;
    cin>>a>>b; 
int d1,d2,d3,d4;
long long int sum;
//1
for(d1=5;d1<=9;d1+=2){
    if(sushu(d1)&&d1>=a&&d1<=b){
    cout<<d1<<endl;

}
}
//2
for(d1=1;d1<=9;d1+=2){
    sum=d2*10+d1;
        if(sushu(sum)&&sum>=a&&sum<=b){
        cout<<sum<<endl;

    }

}
//3
for(d1=1;d1<=9;d1+=2){
    for(d2=0;d2<10;d2++){
        sum=d1+d2*10+d1*100;
        if(sushu(sum)&&sum>=a&&sum<=b){
            cout<<sum<<endl;

        }
    }
}
//4
for(d1=1;d1<=9;d1+=2){
    for(d2=0;d2<10;d2++){
        sum=d1*1000+d2*100+d2*10+d1;
        if(sushu(sum)&&sum>=a&&sum<=b)
        {
            cout<<sum<<endl;

        }
    }
}
//5
for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数
     for (d2 = 0; d2 <= 9; d2++) {
         for (d3 = 0; d3 <= 9; d3++) {
            sum=10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;
            if(sushu(sum)&&sum>=a&&sum<=b){

          cout<<sum<<endl;

      }
        }
     }
 }
//6
for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数
     for (d2 = 0; d2 <= 9; d2++) {
         for (d3 = 0; d3 <= 9; d3++) {
             sum= 100000*d1 + 10000*d2 +1000*d3 + 100*d3+10*d2 + d1;
            if(sushu(sum)&&sum>=a&&sum<=b){

         cout<<sum<<endl;

      }
        }
     }
 }
 //7
 for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数
     for (d2 = 0; d2 <= 9; d2++) {
         for (d3 = 0; d3 <= 9; d3++) {
            for(d4=0;d4<10;d4++){

            sum=1000000*d1 + 100000*d2 +10000*d3 +1000*d4+ 100*d3+10*d2 + d1;
            if(sushu( sum)&&sum>=a&&sum<=b){

          cout<<sum<<endl;
      }
      }
        }
     }
 }
//8
 for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数
     for (d2 = 0; d2 <= 9; d2++) {
         for (d3 = 0; d3 <= 9; d3++) {
            for(d4=0;d4<10;d4++)
            {
             sum=10000000*d1 + 1000000*d2 +100000*d3 +10000*d4+1000*d4+ 100*d3+10*d2 + d1;
            if(sushu(sum)&&sum>=a&&sum<=b){

         cout<<sum<<endl;
      }
      }
        }
     }
 }

}

@Libingyue2011 66T_T


by Libingyue2011 @ 2024-08-09 17:09:30

@fmnawuind2

枚举 2 位数写错了。

下面是你的。

//2
for(d1=1;d1<=9;d1+=2){
    sum=d2/*这里改为d1*/*10+d1;
        if(sushu(sum)&&sum>=a&&sum<=b){
        cout<<sum<<endl;

    }

正确的。

//2
for(d1=1;d1<=9;d1+=2){
    sum=d1*10+d1;
        if(sushu(sum)&&sum>=a&&sum<=b){
        cout<<sum<<endl;

    }

这是个需要检查的地方。

还有,USACO 的第一个点通常是样例,你的第一个点没过,你去测下样例啊!

求关注。

@fmnawuind2


by shuaideiyibi666 @ 2024-08-09 17:55:56

@Libingyue2011 ok 了谢谢检查了很久都没检查到,不知道为什么运行测试样例是对的但是就是过不了测试


|