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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

USACO-Section1.6 Prime Palindromes(素数和回文数)

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USACO-Section1.6 Prime Palindromes(素数和回文数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2017-8-3

題目描述

求出給定范圍內的質數回文數

解答

先求出回文數再判斷是否為給定區間的質數

代碼

/* ID: 18795871 PROG: pprime LANG: C++ */ #include<iostream> #include<cmath> #include<fstream> using namespace std;ifstream fin("pprime.in"); ofstream fout("pprime.out");const int N = 1000; long x[N+1]; int cnt=0; long a,b;bool is_prime(long n){ //判斷是否為給定區間的質數if (n<a||n>b){return false;}if (n==0||n==1) return false;if (n==2||n==3) return true;long i;for (i=2;i<=sqrt(n);i++){if (n%i==0) return false;}return true; }void hui_8(){ //八位回文數 int x1,x2,x3,x4;for (x1=1;x1<=9;x1+=2){for (x2=0;x2<=9;x2++){for (x3=0;x3<=9;x3++){for (x4=0;x4<=9;x4++){ long n=(x1*1000+x2*100+x3*10+x4)*10000+x4*1000+x3*100+x2*10+x1;if (is_prime(n)) fout<<n<<endl;}}}} }void hui_7(){int x1,x2,x3,x4;for (x1=1;x1<=9;x1+=2){for (x2=0;x2<=9;x2++){for (x3=0;x3<=9;x3++){for (x4=0;x4<=9;x4++){long n=(x1*1000+x2*100+x3*10+x4)*1000+x3*100+x2*10+x1;if (is_prime(n)) fout<<n<<endl;}}}} }void hui_6(){int x1,x2,x3;for (x1=1;x1<=9;x1+=2){for (x2=0;x2<=9;x2++){for (x3=0;x3<=9;x3++){long n=(x1*100+x2*10+x3)*1000+x3*100+x2*10+x1;if (is_prime(n)) fout<<n<<endl;}}} }void hui_5(){int x1,x2,x3; for (x1=1;x1<=9;x1+=2){for (x2=0;x2<=9;x2++){for (x3=0;x3<=9;x3++){long n=(x1*100+x2*10+x3)*100+x2*10+x1;if (is_prime(n)) fout<<n<<endl;}}} }void hui_4(){int x1,x2;for (x1=1;x1<=9;x1+=2){for (x2=0;x2<=9;x2++){long n=(x1*10+x2)*100+x2*10+x1;if (is_prime(n)) fout<<n<<endl;}} }void hui_3(){int x1,x2;for (x1=1;x1<=9;x1+=2){for (x2=0;x2<=9;x2++){long n=(x1*10+x2)*10+x1;if (is_prime(n)) fout<<n<<endl;}} }void hui_2(){int x1;for (x1=1;x1<=9;x1+=2){long n=x1*10+x1;if (is_prime(n)) fout<<n<<endl;} }void hui_1(){for (int i=2;i<=9;i++){if (is_prime(i)) fout<<i<<endl;} }int main(){cnt=0;fin>>a>>b;hui_1();hui_2(); hui_3(); hui_4(); hui_5(); hui_6();hui_7(); hui_8();return 0; }

1.回文數比較少,那么我們可以先判斷回文數再判斷素數
2.我們可以枚舉區間內所有的數,如果是回文數的話就再判斷是否為素數,但是這個在第七個測試數據的時候就已經超時了。
3.那么我們最后的選擇就是自己構建回文數。

/* ID: 18795871 PROG: pprime LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std;ifstream fin("pprime.in"); ofstream fout("pprime.out");typedef long long ll; ll a,b;bool ispal(ll n){int x[10],cnt=0;while (n){x[cnt++]=n%10;n/=10;}if (cnt==1) return true;for (int i=0;i<cnt/2;i++){if (x[i]!=x[cnt-i-1]) return false;}return true; }int main(){while (fin>>a>>b){ll i,j;for (i=a;i<=b;i++){if (ispal(i)){for (j=2;j*j<=i;j++){if (i%j==0) break;}if (j*j>i) fout<<i<<endl;}}}return 0; }

上面的是超時的代碼。。。

它給的提示是枚舉所有的回文數(不是暴力枚舉,而是自己構建),然后再判斷即可,這里需要注意的是:我們可以在is_prime函數里面判斷是否在給定a到b區間內,這樣可以省去很多判斷。

/* ID: 18795871 PROG: pprime LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std;ifstream fin("pprime.in"); ofstream fout("pprime.out");typedef long long ll; const int N = 10; ll a,b; int i,j,k,t;bool isprime(ll n){if (n>b||n<a) return false; for (int i=2;i*i<=n;i++){if (n%i==0) return false;}return true; }void pal1(){for (i=1;i<N;i++){if (isprime(i)){fout<<i<<endl; }} }void pal2(){for (i=1;i<N;i++){if (isprime(i*10+i)){fout<<(i*10+i)<<endl; }} }void pal3(){for (i=1;i<N;i++){for (j=0;j<N;j++){if (isprime(i*100+j*10+i)){fout<<(i*100+j*10+i)<<endl; } }} }void pal4(){for (i=1;i<N;i++){for (j=0;j<N;j++){if (isprime((i*10+j)*100+j*10+i)){fout<<((i*10+j)*100+j*10+i)<<endl; } }} }void pal5(){for (i=1;i<N;i++){for (j=0;j<N;j++){for (k=0;k<N;k++){if (isprime((i*100+j*10+k)*100+j*10+i)){fout<<((i*100+j*10+k)*100+j*10+i)<<endl; } } }} }void pal6(){for (i=1;i<N;i++){for (j=0;j<N;j++){for (k=0;k<N;k++){if (isprime((i*100+j*10+k)*1000+k*100+j*10+i)){fout<<((i*100+j*10+k)*1000+k*100+j*10+i)<<endl; } } }} }void pal7(){for (i=1;i<N;i++){for (j=0;j<N;j++){for (k=0;k<N;k++){for (t=0;t<N;t++){if (isprime((i*1000+j*100+k*10+t)*1000+k*100+j*10+i)){fout<<((i*1000+j*100+k*10+t)*1000+k*100+j*10+i)<<endl; } } } }} }void pal8(){for (i=1;i<N;i++){for (j=0;j<N;j++){for (k=0;k<N;k++){for (t=0;t<N;t++){if (isprime((i*1000+j*100+k*10+t)*10000+t*1000+k*100+j*10+i)){fout<<((i*1000+j*100+k*10+t)*10000+t*1000+k*100+j*10+i)<<endl; } } } }} }int main(){while (fin>>a>>b){pal1();pal2();pal3();pal4();pal5();pal6();pal7();pal8();}return 0; }

總結

以上是生活随笔為你收集整理的USACO-Section1.6 Prime Palindromes(素数和回文数)的全部內容,希望文章能夠幫你解決所遇到的問題。

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