zoukankan      html  css  js  c++  java
  • 洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes

    题目:洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes:https://www.luogu.org/problemnew/show/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
    

    说明

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

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

    Hint 2: Generate palindromes by combining digits properly. You might need more than one of the loops like below.

    提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。

    题目翻译来自NOCOW。

    USACO Training Section 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;//(处理回文数...)
             }
         }
     }

    这道题只要判断素数与回文数。
    但是看数据范围较大,无论哪一种方法似乎都要挂。
    好!那砸门慢慢分析:
    首先,最简便的方法是质数判断+回文判断,我的代码可以得 60分,(具体代码与下面打表代码类似<略有修改>)
    然后优化----一脸茫然。

    好!又是看题解的时候--------

    da.da..aa.dalao居然都在教打表!!......

    我 $*%^)_^&$@($)@%%#@($#%&........

    好吧,咋们先打表:

     1 //
     2 #include <bits/stdc++.h>
     3 using namespace std;
     4 typedef long long ll;
     5 #define ri register ll
     6 
     7 ll a,b;
     8 
     9 bool is_Primer(ll num)
    10 {
    11 //    if(num==1)return 0;
    12 //    if(num==2||num==3)return 1;
    13     if(num%6!=1&&num%6!=5)return 0;
    14     for(ri i=5;i<=sqrt(num);i+=6)
    15         if(num%i==0||num%(i+2)==0)return 0;
    16     return 1;
    17 }
    18 
    19 bool is_hui(ll num)
    20 {
    21     ri k=num,sum=0;
    22     while(k)
    23     {
    24         sum=sum*10+k%10;
    25         k/=10;
    26     }
    27     if(num==sum)return 1;
    28     return 0;
    29 }
    30 
    31 void solve()
    32 {
    33     for(ri i=a;i<=b;i++)
    34     {
    35         if(is_Primer(i)&&is_hui(i))
    36         {
    37             cout<<i<<','<<
    ';
    38         }
    39     }
    40 }
    41 
    42 signed main()
    43 {
    44     freopen("0.out","w",stdout);
    45     ios::sync_with_stdio(0),cin.tie(0);
    46     cin>>a>>b;
    47     solve();
    48     return 0;
    49 }
    50 //

    这里需要注意几个地方:

            1.打表一定要输出到文件,否则 windows的 cmd只能为你显示一部分。

            2.注意自己最后想要的模式,例如本题中需要在每个数字后加逗号。否则最后在做数组时需要自己敲逗号,或重打一次表。

            3.注意输入输出之间的关系,以便查询想要的答案。

     于是,我们第一个AC代码诞生了:

      1 //
      2 #include <bits/stdc++.h>
      3 using namespace std;
      4 typedef long long ll;
      5 #define ri register ll
      6 
      7 ll a,b;
      8 ll c[10000001]={
      9 0,
     10 5,
     11 7,
     12 11,
     13 101,
     14 131,
     15 151,
     16 181,
     17 191,
     18 313,
     19 353,
     20 373,
     21 383,
     22 727,
     23 757,
     24 787,
     25 797,
     26 919,
     27 929,
     28 10301,
     29 10501,
     30 10601,
     31 11311,
     32 11411,
     33 12421,
     34 12721,
     35 12821,
     36 13331,
     37 13831,
     38 13931,
     39 14341,
     40 14741,
     41 15451,
     42 15551,
     43 16061,
     44 16361,
     45 16561,
     46 16661,
     47 17471,
     48 17971,
     49 18181,
     50 18481,
     51 19391,
     52 19891,
     53 19991,
     54 30103,
     55 30203,
     56 30403,
     57 30703,
     58 30803,
     59 31013,
     60 31513,
     61 32323,
     62 32423,
     63 33533,
     64 34543,
     65 34843,
     66 35053,
     67 35153,
     68 35353,
     69 35753,
     70 36263,
     71 36563,
     72 37273,
     73 37573,
     74 38083,
     75 38183,
     76 38783,
     77 39293,
     78 70207,
     79 70507,
     80 70607,
     81 71317,
     82 71917,
     83 72227,
     84 72727,
     85 73037,
     86 73237,
     87 73637,
     88 74047,
     89 74747,
     90 75557,
     91 76367,
     92 76667,
     93 77377,
     94 77477,
     95 77977,
     96 78487,
     97 78787,
     98 78887,
     99 79397,
    100 79697,
    101 79997,
    102 90709,
    103 91019,
    104 93139,
    105 93239,
    106 93739,
    107 94049,
    108 94349,
    109 94649,
    110 94849,
    111 94949,
    112 95959,
    113 96269,
    114 96469,
    115 96769,
    116 97379,
    117 97579,
    118 97879,
    119 98389,
    120 98689,
    121 1003001,
    122 1008001,
    123 1022201,
    124 1028201,
    125 1035301,
    126 1043401,
    127 1055501,
    128 1062601,
    129 1065601,
    130 1074701,
    131 1082801,
    132 1085801,
    133 1092901,
    134 1093901,
    135 1114111,
    136 1117111,
    137 1120211,
    138 1123211,
    139 1126211,
    140 1129211,
    141 1134311,
    142 1145411,
    143 1150511,
    144 1153511,
    145 1160611,
    146 1163611,
    147 1175711,
    148 1177711,
    149 1178711,
    150 1180811,
    151 1183811,
    152 1186811,
    153 1190911,
    154 1193911,
    155 1196911,
    156 1201021,
    157 1208021,
    158 1212121,
    159 1215121,
    160 1218121,
    161 1221221,
    162 1235321,
    163 1242421,
    164 1243421,
    165 1245421,
    166 1250521,
    167 1253521,
    168 1257521,
    169 1262621,
    170 1268621,
    171 1273721,
    172 1276721,
    173 1278721,
    174 1280821,
    175 1281821,
    176 1286821,
    177 1287821,
    178 1300031,
    179 1303031,
    180 1311131,
    181 1317131,
    182 1327231,
    183 1328231,
    184 1333331,
    185 1335331,
    186 1338331,
    187 1343431,
    188 1360631,
    189 1362631,
    190 1363631,
    191 1371731,
    192 1374731,
    193 1390931,
    194 1407041,
    195 1409041,
    196 1411141,
    197 1412141,
    198 1422241,
    199 1437341,
    200 1444441,
    201 1447441,
    202 1452541,
    203 1456541,
    204 1461641,
    205 1463641,
    206 1464641,
    207 1469641,
    208 1486841,
    209 1489841,
    210 1490941,
    211 1496941,
    212 1508051,
    213 1513151,
    214 1520251,
    215 1532351,
    216 1535351,
    217 1542451,
    218 1548451,
    219 1550551,
    220 1551551,
    221 1556551,
    222 1557551,
    223 1565651,
    224 1572751,
    225 1579751,
    226 1580851,
    227 1583851,
    228 1589851,
    229 1594951,
    230 1597951,
    231 1598951,
    232 1600061,
    233 1609061,
    234 1611161,
    235 1616161,
    236 1628261,
    237 1630361,
    238 1633361,
    239 1640461,
    240 1643461,
    241 1646461,
    242 1654561,
    243 1657561,
    244 1658561,
    245 1660661,
    246 1670761,
    247 1684861,
    248 1685861,
    249 1688861,
    250 1695961,
    251 1703071,
    252 1707071,
    253 1712171,
    254 1714171,
    255 1730371,
    256 1734371,
    257 1737371,
    258 1748471,
    259 1755571,
    260 1761671,
    261 1764671,
    262 1777771,
    263 1793971,
    264 1802081,
    265 1805081,
    266 1820281,
    267 1823281,
    268 1824281,
    269 1826281,
    270 1829281,
    271 1831381,
    272 1832381,
    273 1842481,
    274 1851581,
    275 1853581,
    276 1856581,
    277 1865681,
    278 1876781,
    279 1878781,
    280 1879781,
    281 1880881,
    282 1881881,
    283 1883881,
    284 1884881,
    285 1895981,
    286 1903091,
    287 1908091,
    288 1909091,
    289 1917191,
    290 1924291,
    291 1930391,
    292 1936391,
    293 1941491,
    294 1951591,
    295 1952591,
    296 1957591,
    297 1958591,
    298 1963691,
    299 1968691,
    300 1969691,
    301 1970791,
    302 1976791,
    303 1981891,
    304 1982891,
    305 1984891,
    306 1987891,
    307 1988891,
    308 1993991,
    309 1995991,
    310 1998991,
    311 3001003,
    312 3002003,
    313 3007003,
    314 3016103,
    315 3026203,
    316 3064603,
    317 3065603,
    318 3072703,
    319 3073703,
    320 3075703,
    321 3083803,
    322 3089803,
    323 3091903,
    324 3095903,
    325 3103013,
    326 3106013,
    327 3127213,
    328 3135313,
    329 3140413,
    330 3155513,
    331 3158513,
    332 3160613,
    333 3166613,
    334 3181813,
    335 3187813,
    336 3193913,
    337 3196913,
    338 3198913,
    339 3211123,
    340 3212123,
    341 3218123,
    342 3222223,
    343 3223223,
    344 3228223,
    345 3233323,
    346 3236323,
    347 3241423,
    348 3245423,
    349 3252523,
    350 3256523,
    351 3258523,
    352 3260623,
    353 3267623,
    354 3272723,
    355 3283823,
    356 3285823,
    357 3286823,
    358 3288823,
    359 3291923,
    360 3293923,
    361 3304033,
    362 3305033,
    363 3307033,
    364 3310133,
    365 3315133,
    366 3319133,
    367 3321233,
    368 3329233,
    369 3331333,
    370 3337333,
    371 3343433,
    372 3353533,
    373 3362633,
    374 3364633,
    375 3365633,
    376 3368633,
    377 3380833,
    378 3391933,
    379 3392933,
    380 3400043,
    381 3411143,
    382 3417143,
    383 3424243,
    384 3425243,
    385 3427243,
    386 3439343,
    387 3441443,
    388 3443443,
    389 3444443,
    390 3447443,
    391 3449443,
    392 3452543,
    393 3460643,
    394 3466643,
    395 3470743,
    396 3479743,
    397 3485843,
    398 3487843,
    399 3503053,
    400 3515153,
    401 3517153,
    402 3528253,
    403 3541453,
    404 3553553,
    405 3558553,
    406 3563653,
    407 3569653,
    408 3586853,
    409 3589853,
    410 3590953,
    411 3591953,
    412 3594953,
    413 3601063,
    414 3607063,
    415 3618163,
    416 3621263,
    417 3627263,
    418 3635363,
    419 3643463,
    420 3646463,
    421 3670763,
    422 3673763,
    423 3680863,
    424 3689863,
    425 3698963,
    426 3708073,
    427 3709073,
    428 3716173,
    429 3717173,
    430 3721273,
    431 3722273,
    432 3728273,
    433 3732373,
    434 3743473,
    435 3746473,
    436 3762673,
    437 3763673,
    438 3765673,
    439 3768673,
    440 3769673,
    441 3773773,
    442 3774773,
    443 3781873,
    444 3784873,
    445 3792973,
    446 3793973,
    447 3799973,
    448 3804083,
    449 3806083,
    450 3812183,
    451 3814183,
    452 3826283,
    453 3829283,
    454 3836383,
    455 3842483,
    456 3853583,
    457 3858583,
    458 3863683,
    459 3864683,
    460 3867683,
    461 3869683,
    462 3871783,
    463 3878783,
    464 3893983,
    465 3899983,
    466 3913193,
    467 3916193,
    468 3918193,
    469 3924293,
    470 3927293,
    471 3931393,
    472 3938393,
    473 3942493,
    474 3946493,
    475 3948493,
    476 3964693,
    477 3970793,
    478 3983893,
    479 3991993,
    480 3994993,
    481 3997993,
    482 3998993,
    483 7014107,
    484 7035307,
    485 7036307,
    486 7041407,
    487 7046407,
    488 7057507,
    489 7065607,
    490 7069607,
    491 7073707,
    492 7079707,
    493 7082807,
    494 7084807,
    495 7087807,
    496 7093907,
    497 7096907,
    498 7100017,
    499 7114117,
    500 7115117,
    501 7118117,
    502 7129217,
    503 7134317,
    504 7136317,
    505 7141417,
    506 7145417,
    507 7155517,
    508 7156517,
    509 7158517,
    510 7159517,
    511 7177717,
    512 7190917,
    513 7194917,
    514 7215127,
    515 7226227,
    516 7246427,
    517 7249427,
    518 7250527,
    519 7256527,
    520 7257527,
    521 7261627,
    522 7267627,
    523 7276727,
    524 7278727,
    525 7291927,
    526 7300037,
    527 7302037,
    528 7310137,
    529 7314137,
    530 7324237,
    531 7327237,
    532 7347437,
    533 7352537,
    534 7354537,
    535 7362637,
    536 7365637,
    537 7381837,
    538 7388837,
    539 7392937,
    540 7401047,
    541 7403047,
    542 7409047,
    543 7415147,
    544 7434347,
    545 7436347,
    546 7439347,
    547 7452547,
    548 7461647,
    549 7466647,
    550 7472747,
    551 7475747,
    552 7485847,
    553 7486847,
    554 7489847,
    555 7493947,
    556 7507057,
    557 7508057,
    558 7518157,
    559 7519157,
    560 7521257,
    561 7527257,
    562 7540457,
    563 7562657,
    564 7564657,
    565 7576757,
    566 7586857,
    567 7592957,
    568 7594957,
    569 7600067,
    570 7611167,
    571 7619167,
    572 7622267,
    573 7630367,
    574 7632367,
    575 7644467,
    576 7654567,
    577 7662667,
    578 7665667,
    579 7666667,
    580 7668667,
    581 7669667,
    582 7674767,
    583 7681867,
    584 7690967,
    585 7693967,
    586 7696967,
    587 7715177,
    588 7718177,
    589 7722277,
    590 7729277,
    591 7733377,
    592 7742477,
    593 7747477,
    594 7750577,
    595 7758577,
    596 7764677,
    597 7772777,
    598 7774777,
    599 7778777,
    600 7782877,
    601 7783877,
    602 7791977,
    603 7794977,
    604 7807087,
    605 7819187,
    606 7820287,
    607 7821287,
    608 7831387,
    609 7832387,
    610 7838387,
    611 7843487,
    612 7850587,
    613 7856587,
    614 7865687,
    615 7867687,
    616 7868687,
    617 7873787,
    618 7884887,
    619 7891987,
    620 7897987,
    621 7913197,
    622 7916197,
    623 7930397,
    624 7933397,
    625 7935397,
    626 7938397,
    627 7941497,
    628 7943497,
    629 7949497,
    630 7957597,
    631 7958597,
    632 7960697,
    633 7977797,
    634 7984897,
    635 7985897,
    636 7987897,
    637 7996997,
    638 9002009,
    639 9015109,
    640 9024209,
    641 9037309,
    642 9042409,
    643 9043409,
    644 9045409,
    645 9046409,
    646 9049409,
    647 9067609,
    648 9073709,
    649 9076709,
    650 9078709,
    651 9091909,
    652 9095909,
    653 9103019,
    654 9109019,
    655 9110119,
    656 9127219,
    657 9128219,
    658 9136319,
    659 9149419,
    660 9169619,
    661 9173719,
    662 9174719,
    663 9179719,
    664 9185819,
    665 9196919,
    666 9199919,
    667 9200029,
    668 9209029,
    669 9212129,
    670 9217129,
    671 9222229,
    672 9223229,
    673 9230329,
    674 9231329,
    675 9255529,
    676 9269629,
    677 9271729,
    678 9277729,
    679 9280829,
    680 9286829,
    681 9289829,
    682 9318139,
    683 9320239,
    684 9324239,
    685 9329239,
    686 9332339,
    687 9338339,
    688 9351539,
    689 9357539,
    690 9375739,
    691 9384839,
    692 9397939,
    693 9400049,
    694 9414149,
    695 9419149,
    696 9433349,
    697 9439349,
    698 9440449,
    699 9446449,
    700 9451549,
    701 9470749,
    702 9477749,
    703 9492949,
    704 9493949,
    705 9495949,
    706 9504059,
    707 9514159,
    708 9526259,
    709 9529259,
    710 9547459,
    711 9556559,
    712 9558559,
    713 9561659,
    714 9577759,
    715 9583859,
    716 9585859,
    717 9586859,
    718 9601069,
    719 9602069,
    720 9604069,
    721 9610169,
    722 9620269,
    723 9624269,
    724 9626269,
    725 9632369,
    726 9634369,
    727 9645469,
    728 9650569,
    729 9657569,
    730 9670769,
    731 9686869,
    732 9700079,
    733 9709079,
    734 9711179,
    735 9714179,
    736 9724279,
    737 9727279,
    738 9732379,
    739 9733379,
    740 9743479,
    741 9749479,
    742 9752579,
    743 9754579,
    744 9758579,
    745 9762679,
    746 9770779,
    747 9776779,
    748 9779779,
    749 9781879,
    750 9782879,
    751 9787879,
    752 9788879,
    753 9795979,
    754 9801089,
    755 9807089,
    756 9809089,
    757 9817189,
    758 9818189,
    759 9820289,
    760 9822289,
    761 9836389,
    762 9837389,
    763 9845489,
    764 9852589,
    765 9871789,
    766 9888889,
    767 9889889,
    768 9896989,
    769 9902099,
    770 9907099,
    771 9908099,
    772 9916199,
    773 9918199,
    774 9919199,
    775 9921299,
    776 9923299,
    777 9926299,
    778 9927299,
    779 9931399,
    780 9932399,
    781 9935399,
    782 9938399,
    783 9957599,
    784 9965699,
    785 9978799,
    786 9980899,
    787 9981899,
    788 9989899,
    789 };
    790 
    791 signed main()
    792 {
    793     ios::sync_with_stdio(0),cin.tie(0);
    794     cin>>a>>b;
    795     for(ri i=1;i<=10000001;i++)
    796     {
    797         if(c[i]>=a&&c[i]<=b)
    798             cout<<c[i]<<'
    ';
    799         if(c[i]>b)break;
    800     }
    801     return 0;
    802 }
    803 //

    好!顺利AC。

    但求知欲极强的你怎能甘心打表呢?

    那有没有什么高效的方法呢?

    在我们执着的努力下,我们找到了这样一篇题解:https://tian2837601005.blog.luogu.org/solution-p1217(如果链接失效不要怪我哟~~)

     核心如下:

     嗯,dalao已经说得很详细了。

    那么,我们就可以AC了。

    虽然最后我并没有再写一次,但这个思路无疑是极好的(佯装大佬评价)。

    这是dalao的标程代码(偷个懒):

     1 /*
     2 writen by  _风休住_(https://tian2837601005.blog.luogu.org/solution-p1217)
     3 */
     4 #include<bits/stdc++.h>
     5 using namespace std;
     6 int A,B;
     7 int fig[15]; 
     8 bool flag=true;
     9 
    10 int GetFig(int size)
    11 {
    12     int ans=0;
    13     for(register int i=1;i<=size;++i)
    14     {
    15         ans*=10;
    16         ans+=fig[i];
    17     }
    18     return ans;
    19 }
    20 
    21 bool PrimeIf(int k)
    22 {
    23     for(register int i=2;i<=sqrt(k);++i) 
    24         if(k%i==0) return false;
    25     return true;
    26 }
    27 
    28 void DFS(int size,int now)
    29 {
    30     if(now<=(size+1)/2)
    31         for(register int i=0;i<=9;++i)
    32         {
    33             if(now==1&&(i==0||i%2==0)) continue;
    34             fig[now]=i;
    35             DFS(size,now+1);
    36             if(flag==false) return;
    37         }
    38     else
    39     {
    40         for(register int i=now;i<=size;++i) fig[i]=fig[size-i+1];
    41         int num=GetFig(size);
    42         if(num<A) return;
    43         if(num>B)
    44         {
    45             flag=false;
    46             return;
    47         }
    48         if(PrimeIf(num)) cout<<num<<endl;
    49         return; 
    50     }
    51 }
    52 
    53 int main()
    54 {
    55     cin>>A>>B;
    56     for(register int i=1;i<=9;++i) DFS(i,1);
    57     return 0;
    58 }
  • 相关阅读:
    mysql max_allowed_packet过小导致的prepare失败
    linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解
    mysql metadata lock锁
    velocity merge作为工具类从web上下文和jar加载模板的两种常见情形
    mysql 5.7.15发布
    mysql 5.6.33发布
    2016年09月编程语言排行榜
    postgresql 9.6 rc1发布
    www.97top10.com--做最好的技术交流网站
    nginx/ajax跨子域请求的两种现代方法以及403解决
  • 原文地址:https://www.cnblogs.com/Vty66CCFF/p/10977233.html
Copyright © 2011-2022 走看看