题目的大意是将一个数分解成素数的乘积。求最大的那个素数在素数表中的位置。与
FZU.1012(http://acm.fzu.edu.cn/problem.php?pid=1012)这一题分解素数的方法与原理相似。用prime[i]来存放i这个数字分解后最大素数的位置。2是素数,所以prime[2]=1;再先将所有2的倍数的prime[]都更新为1.即prime(4,6,8,10)都为1.又因为6又是3的倍数,3是更大的素数,所以将prime[6]更新为3.依此类推……
1
#include
<
stdio.h
>
2
#define
N 1000001
3
int
prime[N];
4
int
main()
5
{
6
for
(
int
j
=
0
;j
<
N;j
++
)
7
prime[j]
=-
1
;
8
int
num
=
0
;
9
for
(
int
i
=
2
; i
<
N; i
++
)
10
{
11
if
(prime[i]
==-
1
)
12
{
13
num
++
;
14
for
(
int
j
=
i;j
<
N;j
+=
i)
15
prime[j]
=
num;
16
}
17
}
18
19
int
n;
20
while
(scanf(
"
%d
"
,
&
n)
!=
EOF)
21
{
22
if
(n
==
1
)
23
printf(
"
0\n
"
);
24
else
25
printf(
"
%d\n
"
,prime[n]);
26
}
27
return
0
;
28
}