前言
这道题我都看不懂,质因子知道,但是重复也算是什么情况?我后面直接看了官方的答案,然后,打断点一个一个看,原来是找到第一个因子,这个算除数,同理,商也是因子,然后对商递归求因子,假如被除数可以对2整除,这个商业可以对2整除,那就是算个重复啦。这个很有道理,但是不看答案我想不到的,所以好好学习记录。
一、质数因子
描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围: 1≤n≤2^9+14
输入描述:
输入一个整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
示例1
输入:
180
复制
输出:
2 2 3 3 5
二、学习记录
1.目前最优解法
代码如下(示例):
using System;
namespace HJ06_ZhiShuYinZi
{
class Program
{
public static void Main(string[] args)
{
string line;
while ((line = System.Console.ReadLine()) != null)
{
int n = Convert.ToInt32(line);
/*
* 求质因子的思路就是:求整数n所有的质因子
* 从2遍历对n取模,能被2整除,先输出去
* 然后把商数赋值给n,就此递归求解
* 为什么可以这么做,因为任何一个合数都可以分解为几个质数乘积
*/
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
while (n % i == 0)
{
Console.Write(i + " ");
n /= i;
}
}
}
// 这个数本身是质数时候
if (n != 1)
{
Console.WriteLine(n);
}
}
}
}
}
总结
大佬采取一个递归思路,以及for循环嵌套while循环,像我以前看过的资料,双for循环比较常见,这样的形式还不太熟悉。
递归算法也不太会,这个应该和高中数学相关的,但我高中数学挺差的,基础不太好,所以后面有空补补,没空再说哈,反正身体现在好了很多,可以去努力学习争取了。