最近一直在做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]);
}
}
}
下个题见!!!