第一次交的程序,
最后一个点超时.
--------------------------------------------------
var
n:int64;
function pd(a:int64):boolean;
var
j:longint;
begin
pd:=true;
for j:=2 to trunc(sqrt(a)) do
if a mod j = 0 then
begin
pd:=false;
exit;
end;
end;
procedure try;
var
i:longint;
begin
for i:=2 to n do
if n mod i = 0 then
if pd(i) then
begin
write(i, );
n:=n div i;
exit;
end;
end;
begin
readln(n);
repeat
if pd(n) then
begin
write(n);
halt;
end;
try;
until false;
end.
==================================================
然后很郁闷,
换了方法,
先生成1-trunc(sqrt(n))范围内的所有素数,
结果过了.
--------------------------------------------------
var
n:int64;
i,ls,s:longint;
a:array[1..10000] of longint;
function pd(p:longint):boolean;
var
j:longint;
begin
pd:=true;
for j:=2 to trunc(sqrt(p)) do
if p mod j = 0 then
begin
pd:=false;
break;
end;
end;
begin
readln(n);
for i:=2 to trunc(sqrt(n)) do
if pd(i) then
begin
inc(ls);
a[ls]:=i;
end;
s:=1;
repeat
while n mod a[s] = 0 do
begin
write(a[s], );
n:=n div a[s];
end;
inc(s);
until (n mod a[s-1]=n) or (s>ls) ;
if n<>1 then write(n);
end.
--------------------------------------------------
状态题目:大合数分解
状态编号: [查看该题]
状态: Accepted
测评机: Xeost[5]
得分: 100分
提交日期: 2008-7-27 23:04:00
有效耗时: 该状态没有记录
测试结果1: 测试结果正确
测试结果2: 测试结果正确
测试结果3: 测试结果正确
测试结果4: 测试结果正确
测试结果5: 测试结果正确
测试结果6: 测试结果正确
测试结果7: 测试结果正确
测试结果8: 测试结果正确
测试结果9: 测试结果正确
测试结果10: 测试结果正确
==================================================
再次攻克一道水题,继续努力.
program p114(input, output);
var
i, j: longint;
q: int64;
wr: boolean;
begin
readln(q);
wr := false;
for i := 2 to trunc(sqrt(q)) + 1 do
while q mod i = 0 do
begin
q := q div i;
if wr then
write( , i)
else
begin
write(i);
wr := true
end;
if q = 1 then
begin
writeln;
halt
end
end;
if q <> 1 then
if wr then
writeln( , q)
else
writeln(q)
else
writeln;
readln
end.
var
n:qword;
a:longint;
begin
readln(n);
a:=1;
while n<>1 do
begin
inc(a);
while (n mod a)<>0 do
inc(a);
n:=n div a;
write(a, );
a:=1;
end;
end.
AC~
program exale;
var n:longint;
m:qword;
begin
readln(m);
n:=1;
while m<>1 do
begin
inc(n);
while m mod n<>0 do
inc(n);
while m mod n=0 do
begin
m:=m div n;
write(n, );
end;
end;
end.
晒代码
var n,i,j,k,l,t:longint;
ss:boolean;
a:array[1..1000000] of longint;
begin
a[1]:=2;
readln(n);
t:=1;
while n>1 do
begin
while n mod a[t]=0 do
begin
write(a[t],' ');
n:=n div a[t];
end;
inc(t);
l:=a[t-1];
inc(l);
repeat
ss:=false;
for i:=1 to t-1 do if l mod a[i]=0 then
begin ss:=true; inc(l);break;end;
until not(ss);
a[t]:=l;
end;
end.
i:longint;
begin
read(n);
i:=2;
repeat
while n mod i=0 do begin n:=n div i; write(i,' '); end;
inc(i);
until n=1;
end.