LightOJ-1035(唯一分解定理)c++

本文详细解析了质因数分解算法,通过实例演示如何将阶乘结果转换为质数的幂相乘形式。介绍了算法步骤,包括初始化质数计数数组、遍历分解质因数、更新质数计数及输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题解:1.首先了解一下题目的意思,给你T组测试用例,每组一个数n,让你把  n!写成质数的幂相乘的形式。

           2.由唯一分解定理可知每个数都可以分解成若干个质数相乘,由于求 n!,我们可以从2到n依次遍历,求出每个数的分解结果。

           3.我们可以建立一个数组md来存储对应的质数出现的次数(也就是质数的幂数),将这个数组初始化为0,遍历时分解出哪个质数,将其加一,最后注意每次输入n时,都要将md数组的所有元素重置为0。

           4.注意输出结果的格式,特别是空格。

AC代码:

#include <iostream>
#include<cstring>

using namespace std;

int md[100],n,t,v;//n<=100

int main()
{
    ios::sync_with_stdio(false);
    cin>>t;
    int cas=1;
    while(t--)
    {
        cin>>n;
        memset(md,0,sizeof(md));//初始化md的值为0
        for(int i=2;i<=n;i++)//2到n遍历
        {
            v=i;//将i的值存起来,便于分解
            for(int j=2;j*j<=v;j++)//分解
            {
                if(v%j==0)//有j这个因子
                {
                    md[j]++;
                    v/=j;
                    while(v%j==0)//是否还有j这个因子
                    {
                        md[j]++;
                        v/=j;
                    }
                }
            }
            if(v>1)//如果大于1,则为分解后的最后一个因子
            {
                md[v]++;
            }
        }
        cout<<"Case "<<cas++<<": "<<n<<" = ";
        cout<<"2"<<" ("<<md[2]<<')';
        for(int i=3;i<=n;i++)
        {
            if(md[i])
            {
                cout<<" * "<<i<<" ("<<md[i]<<')';
            }
        }
        cout<<endl;
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值