信息学奥赛一本通(1210:因子分解)

1210:因子分解


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 7032     通过数: 4387

【题目描述】

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

【输入】

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

【输出】

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

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

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

【输入样例】

60

【输出样例】

2^2*3*5

【分析】

        样例数据60为例,从2开始判断,60可以整除2,则分解为2*30,再判断30,同样可以整除2,继续,2^2*15,15不能整除2,递归因子加1,判断15可以整除3,故2^2*3*5,因子加1,判断5不能整除4,继续,5能够整除5,且余数为1。递归实现上述模拟过程。

【参考代码】

#include<stdio.h>
void fact(int n,int a)  //n待分解的数,a因子 
{
	int b=0;
	if(n==0 || a>n)
		return;
	while(n%a==0)
	{
		b++;
		n/=a;
	}
	if(b>=1)
	{
		if(b==1)
			printf("%d",a);
		else
			printf("%d^%d",a,b);
		if(n>a)
			printf("*");
	}
	fact(n,a+1);
}
int main()
{
    int n;
    scanf("%d",&n);
    fact(n,2);
    return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1210

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值