当前位置:首页 > 题解目录 > 正文内容

因子分解

亿万年的星光4年前 (2021-01-28)题解目录1605

【题目描述】
输入一个数,输出其素因子分解表达式。

【输入描述】
输入一个整数 n (2≤n<100)。

【输出描述】

输出该整数的因子分解表达式。表达式中各个素数从小到大排列。
如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。

【样例输入1】
60

【样例输出1】
2^2*3*5

【样例输入2】


1323


【样例输出2】

3^3*7^2


【分析】

(1)解题思想可以用递归,寻找子问题。也可以用暴力穷举思想
(3)所有的数字都是这个数的质因子的次方,这个题应该改成质因子分解。
(4)要求所有素因子从小到大排列
(5)如果一次性就除完,就没有中间的符号了(比如9),因此需要加个flag来判断是不是第一次

能被4整除的一定能被2整除,同理,6,8,10等一样

同理,能被6整除, 一定能被3整除。

可以想一下桶排的策略,用来计算次数

 while(x%y==0)
 {
        x/=y;
        a[y]++;
 }
//x是数值,y是第一个质数,从2开始枚举,这种方法是不会遇到4这种数字

【参考代码1】

#include<iostream>
#include<cstdio>
#include<cstring>
#define N 10001
using namespace std;
int n;
int a[N],b[N];
void calculate(int x,int y)
{
  //x是数本身,y是质数
   if(x==0||y>x)
       return;
   while(x%y==0)
   {
       x/=y;
       a[y]++;
   }
   calculate(x,y+1); //下一个数
}
int main()
{
   bool flag=false; //用来判断是不是第一次输出
   cin>>n;
   calculate(n,2); //n值和第一个质数
   for(int i=2;i<=n;i++)
   {
       if(flag&&a[i])
           cout<<"*";
       if(a[i])
           flag=true;
       if(a[i]==1)
           cout<<i;
       else if(a[i]>1)
           cout<<i<<"^"<<a[i];
   }
   cout<<endl;
   return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:
返回列表

上一篇:分数求和

下一篇:单词提取

相关文章

2021年崂山区程序设计竞赛题(初中组)

2021年崂山区程序设计竞赛题(初中组)(比赛时间90分钟,试题满分300分)题目名称区间和区间位数的个数有序数组保存文件sumdigitarray输入文件名sum.indigit.inarray.i...

【题解】牛的阵容

【题目描述】农民约翰雇一个专业摄影师给他的奶牛拍照。由于约翰的牛有很多品种,他喜欢他的照片包含每个品种至少一头牛。约翰的牛都站在数轴的不同地方,每一头牛由一个整数位置 X_i 以及整数品种编号 ID_...

【题解】最小新整数

【问题描述】第⼀⾏有x个正整数a1,a2,..,ax,第⼆⾏有y个正整数b1,b2,...,by,第三⾏有z个正整数c1,c2,...,cz,假设第⼀⾏的x个正整数中的最⼤值为a、第⼆⾏的y个正整数中...

【题解】单词接龙

【题目描述】单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重...

分数求和

题目描述】输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。如: 5/6  、 10/3  均是最简形...

【算法】走迷宫

【题目描述】一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜...