PTA:7-6 因子分解

最近一直在做PTA,所以近期的分享也以PTA为主,以下是我遇见的题目

目录

素因子分解表达式

题目描述

输入格式:

输出格式:

输入样例:

输出样例:

题目难点

源代码 


做题前先了解一个概念:素因子分解表达式

素因子分解表达式

素因子分解表达式是将一个数表示为若干个素数的乘积的形式。例如,将28分解为素因子:

28 = 2 * 2 * 7

这里,2和7都是素数,所以28的素因子分解表达式为2 * 2 * 7。 

题目描述

输入一个数,输出其素因子分解表达式。

输入格式:

输入一个整数 n (2≤n<10000000)。

输出格式:

输出该整数的因子分解表达式。

表达式中各个素数从小到大排列。

如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。

输入样例:

20

输出样例:

2^2*5

题目难点

 1.如何找素因子

2.如何数素因子出现次数

3.如何输出规定的答案格式

源代码 

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    scanf("%d",&n);
    int i;
    int arr[100000]={0};//初始化数组,使全部为0
    int a=0;
    int b;
    for(i=2;i<=n;i++)
    {
        while(n%i==0)//若n可以整除这个数,让它一直除下去
        {
            arr[i]++;//用数组储存,并且相应的序号下,储存的是这个数出现次数
            n/=i;
            b=i;//用b来记录最后出现的数是什么
        }
    }
    int sum;
    sum=1;
    for(i=1;i<=b;i++)
    {
        if(arr[i]!=0&&i!=b)//数不为0,才进行下一步
        {
            if(arr[i]==1)
            printf("%d*",i);
            else
                printf("%d^%d*",i,arr[i]);
        }
        if(i==b)//到最后一个数,特殊处理,因为末尾不能有*
        {
             if(arr[i]==1)
            printf("%d",i);
            else
                printf("%d^%d",i,arr[i]);
        }
            
    }
}

 下个题见!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值