日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷 P1217 [USACO1.5]回文质数 Prime Palindrome

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 P1217 [USACO1.5]回文质数 Prime Palindrome 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嗯...

?

這道題對于蒟蒻的我來說實在是TQL...

?

先看一下題:(題目鏈接:https://www.luogu.org/problemnew/show/P1217)

?

然后說一下我的做題過程吧:

?

一看到是普及-的題,就沒有考慮什么篩法,只是用最暴力的篩素數的方法做的,然后就導致最后一個點TLE;

接著是一個改進,又用了埃氏篩,可是它太不穩定了,然后數組總是開小,然后就各種TLE,MLE,RE...

最后用的是歐拉篩(線性篩),然后還是最后一個點TLE...然后就很納悶,看了題解之后才發現有這樣的一個東西:

?

1.偶數位數回文數(除11)必定不是質數(自行百度),所以只要運行到10000000

?

然后發現將讀入后的b進行一次判斷就可以了,然后這種方法,暴力篩還是TLE,埃氏篩由于不穩定也TLE,最終還是只有歐拉篩(線性篩)好用....

?

思路:

主要是在a到b的這段區間中先判斷是否為回文數(注意判斷回文數的方法),并且用歐拉篩判斷是否為素數即可...

?

重難點:

  偶數位數回文數(除11)必定不是質數(自行百度),所以只要運行到10000000

?

否則會一直TLE(不開O2)

?

下面是歐拉篩的AC代碼:

1 #include<cstdio> 2 #include<iostream> 3 4 using namespace std; 5 6 int a, b; 7 const int maxn = 10000005; 8 9 int cnt; 10 int prime[maxn]; 11 int vis[maxn]; 12 bool pp[maxn]; 13 14 inline void is_prime(){ 15 for(int i = 2; i <= b; i++){ 16 if(!vis[i]) prime[++cnt] = i, pp[i] = 1; 17 for(int j = 1; j <= cnt && i * prime[j] <= b; j++){ 18 vis[i * prime[j]] = true; 19 if(i % prime[j] == 0) break; 20 } 21 } 22 }//歐拉篩判斷質數 23 24 inline int hui_wen(int x){ 25 int t = 0; 26 int y = x; 27 while(y != 0){ 28 t = t * 10 + y % 10; 29 y = y / 10; 30 } 31 if(t == x) return 1; 32 return 0; 33 }//判斷回文數 34 35 int main(){ 36 scanf("%d%d", &a, &b); 37 if(b > 10000000) b = 10000000;//重點 38 is_prime(); 39 for(int i = a; i <= b; i++){ 40 int n = i; 41 if(hui_wen(n) && pp[n] ) printf("%d\n", n); 42 } 43 return 0; 44 }

?

轉載于:https://www.cnblogs.com/New-ljx/p/10686537.html

總結

以上是生活随笔為你收集整理的洛谷 P1217 [USACO1.5]回文质数 Prime Palindrome的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。