题目: | 特殊的质数肋骨 | |
来源: | Usaco1.5.3 | |
题目大意: | 求N位数,其所有数都满足从右开始删除,保证左边的数依旧为质数,输出这些数 | |
数据范围: | 1<=N<=8 | |
样例: |
4 |
2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393 |
做题思路: | 根据题意可知,保证删除最后一位后还能成素数,所以除第一位其他位只能为1、3、7、9, 第一位只能为2、3、5、7,据此dfs吧,每向下搜一层判断下是否为质数即可 | |
知识点: | 质数判断、数序规律 |
{
ID:Dount Nameless
TASK:sprime
LANG:PASCAL
}
var
n:longint;
function pd(x:longint):boolean;{<>判断质数}
var
i:longint;
begin
fori:=2 to trunc(sqrt(x)) do
ifx mod i =0 then exit(false);
exit(true);
end;
procedure dfs(x,h:longint);
begin
ifnot pd(x) then exit;
ifh=n then
begin
writeln(x);
exit;
end;
dfs(x*10+1,h+1);
dfs(x*10+3,h+1);
dfs(x*10+7,h+1);
dfs(x*10+9,h+1);
end;
begin
assign(input,'sprime.in');reset(input);
assign(output,'sprime.out');rewrite(output);
readln(n);
dfs(2,1);dfs(3,1);dfs(5,1);dfs(7,1);{<枚举第一位的情况>}
close(input);close(output);
end.
题目来源:
http://ace.delos.com/usacoprob2?a=RexmW8CclSt&S=sprime