HJ06_质数因子C#递归求解


前言

这道题我都看不懂,质因子知道,但是重复也算是什么情况?我后面直接看了官方的答案,然后,打断点一个一个看,原来是找到第一个因子,这个算除数,同理,商也是因子,然后对商递归求因子,假如被除数可以对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循环比较常见,这样的形式还不太熟悉。
递归算法也不太会,这个应该和高中数学相关的,但我高中数学挺差的,基础不太好,所以后面有空补补,没空再说哈,反正身体现在好了很多,可以去努力学习争取了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值