目录
接续文章网址:
回文质数 Prime Palindromes (欧拉筛法优化 AND 生成回文数)-优快云博客
优化思路
1.整体思路不变,但是在之前的代码实现中有几个小的修改地方。
1.题目中的数据大小并不会超出 int 上线,所以之前代码中的 long long 类型都可以转换为 int 类型。
2.之前的数组可以定义小一点。
3.读入优化。
4.输出优化。
2.这道题目输出很多,所以快速读入、输出的重要性就体现出来了。
快速读入
优化 cin
的使用(C++ 风格)
通过设置
ios::sync_with_stdio(false)
解除 C++ 标准输入输出流与 C 标准输入输出流之间的同步,以及设置cin.tie(0)
来解除cin
和cout
之间的绑定,减少不必要的刷新等操作,提升读入速度。
示例如下:
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
cout << "读取到的整数为: " << n << endl;
return 0;
}
快速输出
优化 cout
的使用(C++ 风格)
通过设置
ios::sync_with_stdio(false)
解除 C++ 标准输入输出流与 C 标准输入输出流之间的同步,并且可以搭配std::cout.tie(0)
来解除cout
和cin
之间的绑定(虽然这里主要关注输出,但这样设置能整体优化输入输出的效率),减少不必要的刷新等操作,提升输出速度。
示例如下:
#include <iostream>
int main() {
ios::sync_with_stdio(false);
std::cout.tie(0);
int t = 10;
std::cout << t << '\n'; // 这里用'\n'替代endl,'\n'只起到换行作用,不像endl还会刷新缓冲区,一定程度上能加快速度
return 0;
}
代码实现
#include<bits/stdc++.h>
using namespace std;
int cnt;
bool zs(int p) //带返回值的判断质数函数
{
if(p<=4)
{
if(p==2||p==3) //第一次判断特殊情况
{
return 1;
}
return 0;
}
if(p%6!=1&&p%6!=5) //第二次判断p是否在数字6的两侧
{
return 0;
}
for(int i=5;i<=floor(sqrt(p));i+=6) //依次枚举判断
{
if(p%i==0||p%(i+2)==0)
{
return 0;
}
}
return 1;
}
int find(int x) //带返回值的生成回文数的函数
{
int t=x,s=18,sum=0,i,cnt=0,t1,a[10]={0}; //数组开10个就够了
while(t>s) //判断
{
t-=s;
s*=10;
}
s/=2;
if(t<=s)
{
sum=0;
}
else
{
sum=1;
t-=s;
}
t1=t-1+(s/9); //生成左半边
t=t1;
if(sum%2) //偶数位
{
while(t1>0) //翻转形成右半边
{
a[++cnt]=t1%10;
t1/=10;
}
for(i=1;i<=cnt;i++) //合并左,右半边
{
t=t*10+a[i];
}
}
else //奇数位
{
while(t1>0) //翻转形成右半边
{
a[++cnt]=t1%10;
t1/=10;
}
for(i=2;i<=cnt;i++) //合并左,右半边(i从2开始因为丢弃第一个数字)
{
t=t*10+a[i];
}
}
return t; //返回t(回文数)
}
int main()
{
int i,j,t;
int a1,b;
ios::sync_with_stdio(false);
cin.tie(0);
std::cout.tie(0);
//cin>>t;
//cout<<find(t)<<endl;
cin>>a1>>b; //输入范围
b=min(9989899,b); //减少范围(min函数不能判断long long 类型)
for(i=1;;i++) //依次枚举第i个回文数
{
t=find(i); //生成回文数
if(t>b) break; //判断条件回文数大于条件中的b 跳出循环
if(t>=a1&&zs(t)) cout<<t<<'\n'; //判断回文数t是不是质数并且回文数大于a1
}
return 0;
}
AC记录:
优化打表代码
#include<iostream>
using namespace std;
int i,x,y;
int b[800]={2,3
,5
,7
,11
,101
,131
,151
,181
,191
,313
,353
,373
,383
,727
,757
,787
,797
,919
,929
,10301
,10501
,10601
,11311
,11411
,12421
,12721
,12821
,13331
,13831
,13931
,14341
,14741
,15451
,15551
,16061
,16361
,16561
,16661
,17471
,17971
,18181
,18481
,19391
,19891
,19991
,30103
,30203
,30403
,30703
,30803
,31013
,31513
,32323
,32423
,33533
,34543
,34843
,35053
,35153
,35353
,35753
,36263
,36563
,37273
,37573
,38083
,38183
,38783
,39293
,70207
,70507
,70607
,71317
,71917
,72227
,72727
,73037
,73237
,73637
,74047
,74747
,75557
,76367
,76667
,77377
,77477
,77977
,78487
,78787
,78887
,79397
,79697
,79997
,90709
,91019
,93139
,93239
,93739
,94049
,94349
,94649
,94849
,94949
,95959
,96269
,96469
,96769
,97379
,97579
,97879
,98389
,98689
,1003001
,1008001
,1022201
,1028201
,1035301
,1043401
,1055501
,1062601
,1065601
,1074701
,1082801
,1085801
,1092901
,1093901
,1114111
,1117111
,1120211
,1123211
,1126211
,1129211
,1134311
,1145411
,1150511
,1153511
,1160611
,1163611
,1175711
,1177711
,1178711
,1180811
,1183811
,1186811
,1190911
,1193911
,1196911
,1201021
,1208021
,1212121
,1215121
,1218121
,1221221
,1235321
,1242421
,1243421
,1245421
,1250521
,1253521
,1257521
,1262621
,1268621
,1273721
,1276721
,1278721
,1280821
,1281821
,1286821
,1287821
,1300031
,1303031
,1311131
,1317131
,1327231
,1328231
,1333331
,1335331
,1338331
,1343431
,1360631
,1362631
,1363631
,1371731
,1374731
,1390931
,1407041
,1409041
,1411141
,1412141
,1422241
,1437341
,1444441
,1447441
,1452541
,1456541
,1461641
,1463641
,1464641
,1469641
,1486841
,1489841
,1490941
,1496941
,1508051
,1513151
,1520251
,1532351
,1535351
,1542451
,1548451
,1550551
,1551551
,1556551
,1557551
,1565651
,1572751
,1579751
,1580851
,1583851
,1589851
,1594951
,1597951
,1598951
,1600061
,1609061
,1611161
,1616161
,1628261
,1630361
,1633361
,1640461
,1643461
,1646461
,1654561
,1657561
,1658561
,1660661
,1670761
,1684861
,1685861
,1688861
,1695961
,1703071
,1707071
,1712171
,1714171
,1730371
,1734371
,1737371
,1748471
,1755571
,1761671
,1764671
,1777771
,1793971
,1802081
,1805081
,1820281
,1823281
,1824281
,1826281
,1829281
,1831381
,1832381
,1842481
,1851581
,1853581
,1856581
,1865681
,1876781
,1878781
,1879781
,1880881
,1881881
,1883881
,1884881
,1895981
,1903091
,1908091
,1909091
,1917191
,1924291
,1930391
,1936391
,1941491
,1951591
,1952591
,1957591
,1958591
,1963691
,1968691
,1969691
,1970791
,1976791
,1981891
,1982891
,1984891
,1987891
,1988891
,1993991
,1995991
,1998991
,3001003
,3002003
,3007003
,3016103
,3026203
,3064603
,3065603
,3072703
,3073703
,3075703
,3083803
,3089803
,3091903
,3095903
,3103013
,3106013
,3127213
,3135313
,3140413
,3155513
,3158513
,3160613
,3166613
,3181813
,3187813
,3193913
,3196913
,3198913
,3211123
,3212123
,3218123
,3222223
,3223223
,3228223
,3233323
,3236323
,3241423
,3245423
,3252523
,3256523
,3258523
,3260623
,3267623
,3272723
,3283823
,3285823
,3286823
,3288823
,3291923
,3293923
,3304033
,3305033
,3307033
,3310133
,3315133
,3319133
,3321233
,3329233
,3331333
,3337333
,3343433
,3353533
,3362633
,3364633
,3365633
,3368633
,3380833
,3391933
,3392933
,3400043
,3411143
,3417143
,3424243
,3425243
,3427243
,3439343
,3441443
,3443443
,3444443
,3447443
,3449443
,3452543
,3460643
,3466643
,3470743
,3479743
,3485843
,3487843
,3503053
,3515153
,3517153
,3528253
,3541453
,3553553
,3558553
,3563653
,3569653
,3586853
,3589853
,3590953
,3591953
,3594953
,3601063
,3607063
,3618163
,3621263
,3627263
,3635363
,3643463
,3646463
,3670763
,3673763
,3680863
,3689863
,3698963
,3708073
,3709073
,3716173
,3717173
,3721273
,3722273
,3728273
,3732373
,3743473
,3746473
,3762673
,3763673
,3765673
,3768673
,3769673
,3773773
,3774773
,3781873
,3784873
,3792973
,3793973
,3799973
,3804083
,3806083
,3812183
,3814183
,3826283
,3829283
,3836383
,3842483
,3853583
,3858583
,3863683
,3864683
,3867683
,3869683
,3871783
,3878783
,3893983
,3899983
,3913193
,3916193
,3918193
,3924293
,3927293
,3931393
,3938393
,3942493
,3946493
,3948493
,3964693
,3970793
,3983893
,3991993
,3994993
,3997993
,3998993
,7014107
,7035307
,7036307
,7041407
,7046407
,7057507
,7065607
,7069607
,7073707
,7079707
,7082807
,7084807
,7087807
,7093907
,7096907
,7100017
,7114117
,7115117
,7118117
,7129217
,7134317
,7136317
,7141417
,7145417
,7155517
,7156517
,7158517
,7159517
,7177717
,7190917
,7194917
,7215127
,7226227
,7246427
,7249427
,7250527
,7256527
,7257527
,7261627
,7267627
,7276727
,7278727
,7291927
,7300037
,7302037
,7310137
,7314137
,7324237
,7327237
,7347437
,7352537
,7354537
,7362637
,7365637
,7381837
,7388837
,7392937
,7401047
,7403047
,7409047
,7415147
,7434347
,7436347
,7439347
,7452547
,7461647
,7466647
,7472747
,7475747
,7485847
,7486847
,7489847
,7493947
,7507057
,7508057
,7518157
,7519157
,7521257
,7527257
,7540457
,7562657
,7564657
,7576757
,7586857
,7592957
,7594957
,7600067
,7611167
,7619167
,7622267
,7630367
,7632367
,7644467
,7654567
,7662667
,7665667
,7666667
,7668667
,7669667
,7674767
,7681867
,7690967
,7693967
,7696967
,7715177
,7718177
,7722277
,7729277
,7733377
,7742477
,7747477
,7750577
,7758577
,7764677
,7772777
,7774777
,7778777
,7782877
,7783877
,7791977
,7794977
,7807087
,7819187
,7820287
,7821287
,7831387
,7832387
,7838387
,7843487
,7850587
,7856587
,7865687
,7867687
,7868687
,7873787
,7884887
,7891987
,7897987
,7913197
,7916197
,7930397
,7933397
,7935397
,7938397
,7941497
,7943497
,7949497
,7957597
,7958597
,7960697
,7977797
,7984897
,7985897
,7987897
,7996997
,9002009
,9015109
,9024209
,9037309
,9042409
,9043409
,9045409
,9046409
,9049409
,9067609
,9073709
,9076709
,9078709
,9091909
,9095909
,9103019
,9109019
,9110119
,9127219
,9128219
,9136319
,9149419
,9169619
,9173719
,9174719
,9179719
,9185819
,9196919
,9199919
,9200029
,9209029
,9212129
,9217129
,9222229
,9223229
,9230329
,9231329
,9255529
,9269629
,9271729
,9277729
,9280829
,9286829
,9289829
,9318139
,9320239
,9324239
,9329239
,9332339
,9338339
,9351539
,9357539
,9375739
,9384839
,9397939
,9400049
,9414149
,9419149
,9433349
,9439349
,9440449
,9446449
,9451549
,9470749
,9477749
,9492949
,9493949
,9495949
,9504059
,9514159
,9526259
,9529259
,9547459
,9556559
,9558559
,9561659
,9577759
,9583859
,9585859
,9586859
,9601069
,9602069
,9604069
,9610169
,9620269
,9624269
,9626269
,9632369
,9634369
,9645469
,9650569
,9657569
,9670769
,9686869
,9700079
,9709079
,9711179
,9714179
,9724279
,9727279
,9732379
,9733379
,9743479
,9749479
,9752579
,9754579
,9758579
,9762679
,9770779
,9776779
,9779779
,9781879
,9782879
,9787879
,9788879
,9795979
,9801089
,9807089
,9809089
,9817189
,9818189
,9820289
,9822289
,9836389
,9837389
,9845489
,9852589
,9871789
,9888889
,9889889
,9896989
,9902099
,9907099
,9908099
,9916199
,9918199
,9919199
,9921299
,9923299
,9926299
,9927299
,9931399
,9932399
,9935399
,9938399
,9957599
,9965699
,9978799
,9980899
,9981899
,9989899};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
std::cout.tie(0);
cin>>x>>y; //优化读入
for(i=1;i<=781;i++)
{
if(b[i]>=x&&b[i]<=y) cout<<b[i]<<'\n'; //和之前优化一样
}
return 0;
}
AC记录:
无注释满分代码
代码1:
#include<bits/stdc++.h>
using namespace std;
int cnt;
bool zs(int p)
{
if(p<=4)
{
if(p==2||p==3)
{
return 1;
}
return 0;
}
if(p%6!=1&&p%6!=5)
{
return 0;
}
for(int i=5;i<=floor(sqrt(p));i+=6)
{
if(p%i==0||p%(i+2)==0)
{
return 0;
}
}
return 1;
}
int find(int x)
{
int t=x,s=18,sum=0,i,cnt=0,t1,a[10]={0};
while(t>s)
{
t-=s;
s*=10;
}
s/=2;
if(t<=s)
{
sum=0;
}
else
{
sum=1;
t-=s;
}
t1=t-1+(s/9);
t=t1;
if(sum%2)
{
while(t1>0)
{
a[++cnt]=t1%10;
t1/=10;
}
for(i=1;i<=cnt;i++)
{
t=t*10+a[i];
}
}
else
{
while(t1>0)
{
a[++cnt]=t1%10;
t1/=10;
}
for(i=2;i<=cnt;i++)
{
t=t*10+a[i];
}
}
return t;
}
int main()
{
int i,j,t;
int a1,b;
ios::sync_with_stdio(false);
cin.tie(0);
std::cout.tie(0);
cin>>a1>>b;
b=min(9989899,b);
for(i=1;;i++)
{
t=find(i);
if(t>b) break;
if(t>=a1&&zs(t)) cout<<t<<'\n';
}
return 0;
}
代码2:
#include<iostream>
using namespace std;
int i,x,y;
int b[800]={2,3
,5
,7
,11
,101
,131
,151
,181
,191
,313
,353
,373
,383
,727
,757
,787
,797
,919
,929
,10301
,10501
,10601
,11311
,11411
,12421
,12721
,12821
,13331
,13831
,13931
,14341
,14741
,15451
,15551
,16061
,16361
,16561
,16661
,17471
,17971
,18181
,18481
,19391
,19891
,19991
,30103
,30203
,30403
,30703
,30803
,31013
,31513
,32323
,32423
,33533
,34543
,34843
,35053
,35153
,35353
,35753
,36263
,36563
,37273
,37573
,38083
,38183
,38783
,39293
,70207
,70507
,70607
,71317
,71917
,72227
,72727
,73037
,73237
,73637
,74047
,74747
,75557
,76367
,76667
,77377
,77477
,77977
,78487
,78787
,78887
,79397
,79697
,79997
,90709
,91019
,93139
,93239
,93739
,94049
,94349
,94649
,94849
,94949
,95959
,96269
,96469
,96769
,97379
,97579
,97879
,98389
,98689
,1003001
,1008001
,1022201
,1028201
,1035301
,1043401
,1055501
,1062601
,1065601
,1074701
,1082801
,1085801
,1092901
,1093901
,1114111
,1117111
,1120211
,1123211
,1126211
,1129211
,1134311
,1145411
,1150511
,1153511
,1160611
,1163611
,1175711
,1177711
,1178711
,1180811
,1183811
,1186811
,1190911
,1193911
,1196911
,1201021
,1208021
,1212121
,1215121
,1218121
,1221221
,1235321
,1242421
,1243421
,1245421
,1250521
,1253521
,1257521
,1262621
,1268621
,1273721
,1276721
,1278721
,1280821
,1281821
,1286821
,1287821
,1300031
,1303031
,1311131
,1317131
,1327231
,1328231
,1333331
,1335331
,1338331
,1343431
,1360631
,1362631
,1363631
,1371731
,1374731
,1390931
,1407041
,1409041
,1411141
,1412141
,1422241
,1437341
,1444441
,1447441
,1452541
,1456541
,1461641
,1463641
,1464641
,1469641
,1486841
,1489841
,1490941
,1496941
,1508051
,1513151
,1520251
,1532351
,1535351
,1542451
,1548451
,1550551
,1551551
,1556551
,1557551
,1565651
,1572751
,1579751
,1580851
,1583851
,1589851
,1594951
,1597951
,1598951
,1600061
,1609061
,1611161
,1616161
,1628261
,1630361
,1633361
,1640461
,1643461
,1646461
,1654561
,1657561
,1658561
,1660661
,1670761
,1684861
,1685861
,1688861
,1695961
,1703071
,1707071
,1712171
,1714171
,1730371
,1734371
,1737371
,1748471
,1755571
,1761671
,1764671
,1777771
,1793971
,1802081
,1805081
,1820281
,1823281
,1824281
,1826281
,1829281
,1831381
,1832381
,1842481
,1851581
,1853581
,1856581
,1865681
,1876781
,1878781
,1879781
,1880881
,1881881
,1883881
,1884881
,1895981
,1903091
,1908091
,1909091
,1917191
,1924291
,1930391
,1936391
,1941491
,1951591
,1952591
,1957591
,1958591
,1963691
,1968691
,1969691
,1970791
,1976791
,1981891
,1982891
,1984891
,1987891
,1988891
,1993991
,1995991
,1998991
,3001003
,3002003
,3007003
,3016103
,3026203
,3064603
,3065603
,3072703
,3073703
,3075703
,3083803
,3089803
,3091903
,3095903
,3103013
,3106013
,3127213
,3135313
,3140413
,3155513
,3158513
,3160613
,3166613
,3181813
,3187813
,3193913
,3196913
,3198913
,3211123
,3212123
,3218123
,3222223
,3223223
,3228223
,3233323
,3236323
,3241423
,3245423
,3252523
,3256523
,3258523
,3260623
,3267623
,3272723
,3283823
,3285823
,3286823
,3288823
,3291923
,3293923
,3304033
,3305033
,3307033
,3310133
,3315133
,3319133
,3321233
,3329233
,3331333
,3337333
,3343433
,3353533
,3362633
,3364633
,3365633
,3368633
,3380833
,3391933
,3392933
,3400043
,3411143
,3417143
,3424243
,3425243
,3427243
,3439343
,3441443
,3443443
,3444443
,3447443
,3449443
,3452543
,3460643
,3466643
,3470743
,3479743
,3485843
,3487843
,3503053
,3515153
,3517153
,3528253
,3541453
,3553553
,3558553
,3563653
,3569653
,3586853
,3589853
,3590953
,3591953
,3594953
,3601063
,3607063
,3618163
,3621263
,3627263
,3635363
,3643463
,3646463
,3670763
,3673763
,3680863
,3689863
,3698963
,3708073
,3709073
,3716173
,3717173
,3721273
,3722273
,3728273
,3732373
,3743473
,3746473
,3762673
,3763673
,3765673
,3768673
,3769673
,3773773
,3774773
,3781873
,3784873
,3792973
,3793973
,3799973
,3804083
,3806083
,3812183
,3814183
,3826283
,3829283
,3836383
,3842483
,3853583
,3858583
,3863683
,3864683
,3867683
,3869683
,3871783
,3878783
,3893983
,3899983
,3913193
,3916193
,3918193
,3924293
,3927293
,3931393
,3938393
,3942493
,3946493
,3948493
,3964693
,3970793
,3983893
,3991993
,3994993
,3997993
,3998993
,7014107
,7035307
,7036307
,7041407
,7046407
,7057507
,7065607
,7069607
,7073707
,7079707
,7082807
,7084807
,7087807
,7093907
,7096907
,7100017
,7114117
,7115117
,7118117
,7129217
,7134317
,7136317
,7141417
,7145417
,7155517
,7156517
,7158517
,7159517
,7177717
,7190917
,7194917
,7215127
,7226227
,7246427
,7249427
,7250527
,7256527
,7257527
,7261627
,7267627
,7276727
,7278727
,7291927
,7300037
,7302037
,7310137
,7314137
,7324237
,7327237
,7347437
,7352537
,7354537
,7362637
,7365637
,7381837
,7388837
,7392937
,7401047
,7403047
,7409047
,7415147
,7434347
,7436347
,7439347
,7452547
,7461647
,7466647
,7472747
,7475747
,7485847
,7486847
,7489847
,7493947
,7507057
,7508057
,7518157
,7519157
,7521257
,7527257
,7540457
,7562657
,7564657
,7576757
,7586857
,7592957
,7594957
,7600067
,7611167
,7619167
,7622267
,7630367
,7632367
,7644467
,7654567
,7662667
,7665667
,7666667
,7668667
,7669667
,7674767
,7681867
,7690967
,7693967
,7696967
,7715177
,7718177
,7722277
,7729277
,7733377
,7742477
,7747477
,7750577
,7758577
,7764677
,7772777
,7774777
,7778777
,7782877
,7783877
,7791977
,7794977
,7807087
,7819187
,7820287
,7821287
,7831387
,7832387
,7838387
,7843487
,7850587
,7856587
,7865687
,7867687
,7868687
,7873787
,7884887
,7891987
,7897987
,7913197
,7916197
,7930397
,7933397
,7935397
,7938397
,7941497
,7943497
,7949497
,7957597
,7958597
,7960697
,7977797
,7984897
,7985897
,7987897
,7996997
,9002009
,9015109
,9024209
,9037309
,9042409
,9043409
,9045409
,9046409
,9049409
,9067609
,9073709
,9076709
,9078709
,9091909
,9095909
,9103019
,9109019
,9110119
,9127219
,9128219
,9136319
,9149419
,9169619
,9173719
,9174719
,9179719
,9185819
,9196919
,9199919
,9200029
,9209029
,9212129
,9217129
,9222229
,9223229
,9230329
,9231329
,9255529
,9269629
,9271729
,9277729
,9280829
,9286829
,9289829
,9318139
,9320239
,9324239
,9329239
,9332339
,9338339
,9351539
,9357539
,9375739
,9384839
,9397939
,9400049
,9414149
,9419149
,9433349
,9439349
,9440449
,9446449
,9451549
,9470749
,9477749
,9492949
,9493949
,9495949
,9504059
,9514159
,9526259
,9529259
,9547459
,9556559
,9558559
,9561659
,9577759
,9583859
,9585859
,9586859
,9601069
,9602069
,9604069
,9610169
,9620269
,9624269
,9626269
,9632369
,9634369
,9645469
,9650569
,9657569
,9670769
,9686869
,9700079
,9709079
,9711179
,9714179
,9724279
,9727279
,9732379
,9733379
,9743479
,9749479
,9752579
,9754579
,9758579
,9762679
,9770779
,9776779
,9779779
,9781879
,9782879
,9787879
,9788879
,9795979
,9801089
,9807089
,9809089
,9817189
,9818189
,9820289
,9822289
,9836389
,9837389
,9845489
,9852589
,9871789
,9888889
,9889889
,9896989
,9902099
,9907099
,9908099
,9916199
,9918199
,9919199
,9921299
,9923299
,9926299
,9927299
,9931399
,9932399
,9935399
,9938399
,9957599
,9965699
,9978799
,9980899
,9981899
,9989899};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
std::cout.tie(0);
cin>>x>>y;
for(i=1;i<=781;i++)
{
if(b[i]>=x&&b[i]<=y) cout<<b[i]<<'\n';
}
return 0;
}
制作不易给个赞吧!!!