不管怎样都215
pascal吧
全部回复
仅看楼主
level 1
Shellot4 楼主
var
i,j,n,k:longint;
bo:boolean;
t:int64;
function exp(b,p:longint):longint;
begin
exp:=1;
while p>0 do
begin
if p mod 2 = 1 then exp:=exp*b;
b:=b*b;
p:=p div 2;
end;
end;
begin
read(n);
t:=int64(exp(10,n));
for i:= t div 10 to t-1 do
begin
for j:= 0 to i do
for k:= 2 to int64(trunc(sqrt(i div exp(10,j)))) do
if j mod k = 0 then bo:=true;
if not bo then writeln(i);
bo:=false;
end;
end.
数据范围是1<=n<=8
时间复杂度是指数级的
求dalao如何解决?(最好再优化)
题面:http://hz2hs.openjudge.cn/2017shu/13786/
2017年07月26日 13点07分 1
level 1
Shellot4 楼主
说明:
exp是快速幂
2 to trunc(sqrt(i div exp(10,j)))是枚举素数因数
2017年07月26日 13点07分 2
level 5
不需要枚举所有的数,暴搜在已知满足的质数后面添加然后暴力判质数即可,解的数量是比较少的。
顺带一提exp在pascal中自带的函数,exp(x)意义是返回e^x,所以10^x只要写round(exp(x*ln(10)))即可。
提醒:而且这种稍简易的题目不必要用快速幂
2017年07月26日 15点07分 3
1