先说定理:唯一分解定理,每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。分解质因数只针对合数。 并且,每个合数能够且仅仅能够被分解为唯一一组质因数的乘积。 还有一个定理,不开根号会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)
	}
}