素因子分解(递归求解)

简介: 素因子分解(递归求解)

描述:


给定某个正整数 N,求其素因子分解结果,即给出其因式分解表达式


N = p1k1 * p2k2… pmkm


输入:

输入long int范围内的正整数N。

输出:

pi由小到大输出,当ki==1时可以直接输出pi。


思路:

一个典型的递归求解问题,注意特判输入的数为‘1’即可;


#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e6+100;
const int p = 1e4;
const double eps = 1e-8;
ll k;
ll judge(ll n)
{
  if(n<2) return 0;
  for(ll i=2;i<=n/i;i++)
    if(n%i==0)
      return 0;
    return 1;
}//判断素数 
void Prime(ll n)
{
  if(n==1) return ;//递归函数跳出条件,分解到 1 就结束 
  int cnt=0;
  for(int i=2;;i++)
  {
    if(n%i==0&&judge(i)==1)//是素因数 
    {
      cout<<i;//输出这个数 
      while(n%i==0)
      {
        cnt++;
        n/=i;
      }//找相同的数的个数 
      //相同的数个数直接用一个while循环来找,没必要再调用递归 
      if(cnt==1)
      {
        if(n!=1)
          cout<<"*";
      }//没有相同的输出乘号,注意判断这个数不是最后一个数 
      else
      {
        if(n==1)
          cout<<"^"<<cnt;
        else
          cout<<"^"<<cnt<<"*";
      }//有相同的输出幂次和乘号,注意判断是不是最后一个 
      break;
    }
  }
  Prime(n);//再次调用 
}
int main()
{
  cin>>k;
  cout<<k<<"=";
  if(k==1)//特判 1 
  {
    cout<<k;
    return 0;
  }
  else
    Prime(k);//调用函数 
  return 0; 
}


反思:


相同的数个数直接用一个while循环来找,没必要再调用递归,节省时间


目录
相关文章
|
8月前
递归求解汉诺塔问题(超详解)
递归求解汉诺塔问题(超详解)
214 0
|
机器学习/深度学习 算法
斐波拉契数列的递推递归求解算法
斐波拉契数列的递推递归求解算法
123 0
递归求解汉诺塔问题
博主之前有写过关于递归问题的思维模式: [递归的思路](https://blog.csdn.net/qq_43575801/article/details/124029190?spm=1001.2014.3001.5501) 下面将用这种思维模式来求解经典汉诺塔问题。
144 0
递归求解汉诺塔问题
递归与动态规划
凡是递归的过程,都可以化成树的过程。递归就是问题变成子问题求解的过程。动态规划暂时没明白,好像是需要一张动态规划表,是根据递归搞出来的。 问题1:开始有一头母牛,母牛每年会生一只母牛,新出生的母牛成长三年后也能每年生一只母牛,假设牛都不会死。
699 0
|
机器学习/深度学习
N皇后问题【递归求解】
n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案。 输入一个正整数N,则程序输出N皇后问题的全部摆法。输出结果里的每一行都代表一种摆法。行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。
1180 0
careercup-递归和动态规划 9.8
9.8 给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码就是n分有几种表示法。 解法: 使用回溯法进行解决,实际上就是一个类似枚举的过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。
831 0

热门文章

最新文章