先说定理:唯一分解定理,每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。分解质因数只针对合数。 并且,每个合数能够且仅仅能够被分解为唯一一组质因数的乘积。 还有一个定理,不开根号会t,对一个正整数n来说,如果它存在[2,n]范围内的质因子,要么这些质因子全部 小于等于 sqrt(n),要么只存在 一个大于 sqrt(n)的质因子,而其余质因子全部 小于等于 sqrt(n)。 知道定理就好办了,不用判断是不是素数,从小到大试过去就好了。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
var n int
in := bufio.NewReader(os.Stdin)
fmt.Fscan(in, &n)
for i := 2; i*i <= n; i++ {
for n%i == 0 {
n /= i
fmt.Printf("%d ", i)
}
}
if n != 1 {
fmt.Printf("%d ", n)
}
}

京公网安备 11010502036488号