usaco 1.5.2——pprime

Prime Palindromes 回文质数

描述

因为151即是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 号是回文质数。

写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)间的所有回文质数;

格式

PROGRAM NAME: pprime

INPUT FORMAT:

(file pprime.in)

第 1 行: 二个整数 a 和 b .

OUTPUT FORMAT:

(file pprime.out)

输出一个回文质数的列表,一行一个。

SAMPLE INPUT

5 500

SAMPLE OUTPUT

5

7

11

101

131

151

181

191

313

353

373

383

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.027 secs, 4180 KB]
   Test 2: TEST OK [0.027 secs, 4180 KB]
   Test 3: TEST OK [0.027 secs, 4180 KB]
   Test 4: TEST OK [0.027 secs, 4180 KB]
   Test 5: TEST OK [0.027 secs, 4180 KB]
   Test 6: TEST OK [0.027 secs, 4180 KB]
   Test 7: TEST OK [0.027 secs, 4180 KB]
   Test 8: TEST OK [0.027 secs, 4180 KB]
   Test 9: TEST OK [0.027 secs, 4180 KB]

All tests OK.

Your program ('pprime') produced all correct answers! This is your submission #2 for this

problem. Congratulations!

本来暴力枚举的,没过,

在参考HINT后

我打了个更暴力的暴力枚举,

过了。。。。。。

看代码,不解释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
{
ID: codeway3
PROG: pprime
LANG: PASCAL
}
program pprime;
  var
    i,j,n,m,k,l,r:longint;
    a1,a2,a3,a4:longint;
    a:array[1..1000000]of longint;
  function pd(x:longint):boolean;
    var
      s:string;
      le,i:longint;
    begin
      for i:=2 to trunc(sqrt(x)) do
        if x mod i=0 then exit(false);
      if (x<l)or(x>r) then exit(false);
      exit(true);
    end;
  procedure sort(l,r:longint);
    var
      i,j,x,y:longint;
    begin
      i:=l;j:=r;
      x:=a[(l+r)div 2];
      repeat
        while a[i]<x do inc(i);
        while a[j]>x do dec(j);
        if i<=j then
          begin
            y:=a[i];a[i]:=a[j];a[j]:=y;
            inc(i);dec(j);
          end;
      until i>j;
      if i<r then sort(i,r);
      if l<j then sort(l,j);
    end;
  begin
    assign(input,'pprime.in');
    reset(input);
    assign(output,'pprime.out');
    rewrite(output);
    readln(l,r);
    for a1:=1 to 9 do
      begin
        k:=a1;if pd(k) then begin inc(n);a[n]:=k;end;
        k:=a1*10+a1;if pd(k) then begin inc(n);a[n]:=k;end;
      end;
    for a1:=1 to 9 do
      for a2:=0 to 9 do
        begin
          k:=a1*100+a2*10+a1;if pd(k) then begin inc(n);a[n]:=k;end;
          k:=a1*1000+a2*100+a2*10+a1;if pd(k) then begin inc(n);a[n]:=k;end;
        end;
    for a1:=1 to 9 do
      for a2:=0 to 9 do
        for a3:=0 to 9 do
          begin
            k:=a1*10000+a2*1000+a3*100+a2*10+a1;if pd(k) then begin inc(n);a[n]:=k;end;
            k:=a1*100000+a2*10000+a3*1000+a3*100+a2*10+a1;if pd(k) then begin inc(n);a[n]:=k;end;
          end;
    for a1:=1 to 9 do
      for a2:=0 to 9 do
        for a3:=0 to 9 do
          for a4:=0 to 9 do
            begin
              k:=a1*1000000+a2*100000+a3*10000+a4*1000+a3*100+a2*10+a1;
              if pd(k) then begin inc(n);a[n]:=k;end;
              k:=a1*10000000+a2*1000000+a3*100000+a4*10000+a4*1000+a3*100+a2*10+a1;
              if pd(k) then begin inc(n);a[n]:=k;end;
            end;
    sort(1,n);
    for i:=1 to n do writeln(a[i]);
    close(input);
    close(output);
  end.

posted on   codeway3  阅读(330)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

导航

< 2011年10月 >
25 26 27 28 29 30 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示