题目描述
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
View Code
1 program sky;
2 var
3 l,r,i,tot,j,k:longint;
4 tp:longint;
5 a:array[0..10000] of longint;
6 b,c:array[0..10000,0..1000] of longint;
7 v:array[0..10000] of boolean;
8 begin
9 readln(l,r);
10 for i:=2 to 10000 do
11 if not v[i] then
12 begin
13 inc(tot); a[tot]:=i; j:=2;
14 while i*j<=10000 do
15 begin
16 v[i*j]:=true;
17 inc(j);
18 end;
19 end;
20 for i:=l to r do
21 begin
22 tp:=i;
23 for j:=1 to tot do
24 begin
25 if tp=1 then break;
26 if tp mod a[j]<>0 then continue;
27 inc(b[i,0]); b[i,b[i,0]]:=a[j];
28 while tp mod a[j]=0 do
29 begin
30 inc(c[i,b[i,0]]);
31 tp:=tp div a[j];
32 end;
33 end;
34 end;
35 for i:=l to r do
36 begin
37 write(i,'=');
38 write(b[i,1]);
39 for k:=2 to c[i,1] do write('*',b[i,1]);
40 for j:=2 to b[i,0] do
41 for k:=1 to c[i,j] do
42 write('*',b[i,j]);
43 writeln;
44 end;
45 end.
不大爽的模拟题,
分解质因数打错了两个地方
b[i,b[i,0]]:=a[j]而非b[i,b[i,0]]:=j;
还有就是c数组第一次不用加1,即c[i,b[i,0]]:=1是不必要的
会出错,后面的过程里会加上的
输出的时候也有点小麻烦,
需要特别处理一下第一个。
skysun原创,http://www.cnblogs.com/skysun