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

因子分解

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

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

【输入描述】
输入一个整数 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;
}


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

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

分享给朋友:
返回列表

上一篇:分数求和

下一篇:单词提取

相关文章

【题解】打击犯罪

【题目描述】某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就...

【题解】河中跳房子

【题目描述】每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000...

单词提取

【题目描述】毛毛是个粗心的孩子,有一天在写英语作文时,不小心把不属于英文的字符混了进去。现在请帮他筛选出正常的英语单词。【输入描述】一行英语句子,大小写不定。以英文句点结尾。【输出描述】 删...

【题解】分糖果问题

【题解】分糖果问题

【题目描述】一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:每个孩子不管得分多少,起码分到一个糖果。任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)给定一个数组 a...

【题解】核电站问题

【题目描述】一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续3个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。现在,请你计算:对于给定的N,求不发生爆炸的放置核物质的方案总数...

【题解】使每位学生都有座位的最少移动次数

【题目描述】一个房间里有 n 个 空闲 座位和 n 名 站着的 学生,房间用一个数轴表示。给你一个长度为 n&...