整數因子分解問題

ACG00發表於2020-12-06

分治演算法之整數因子分解

Description
大於1的正整數n可以分解為:n=x1x2…*xm。例如,當n=12 時,共有8 種不同的分解式:
12=12;
12=6x2;
12=4x3;
12=3x4;
12=3x2x2;
12=2x6;
12=2x3x2;
12=2x2x3。
對於給定的正整數n,計算n共有多少種不同的分解式。

Input
輸入資料只有一行,有1個正整數n (1≤n≤2000000000)。

Output
將計算出的不同的分解式數輸出。

Sample
Input
12
Output
8

思想:

分治遞迴的思想。1、把這個數讀取進去。2、如果這個數剛好是1,就直接返回1就OK了。 3、然後迴圈遍歷,將一個數n從2到它本身依次求餘,如果發現n求餘後為0,證明這個被求餘的數i是這個整數的因子,那麼我們對n/i再進行遞迴,直到n/i變為1停止遞迴。

#include<bits/stdc++.h>
using namespace std;
int e=0;
void f(int n)
{
    if (n==1)
        e++;
    for (int i=2; i<=n; i++)
    {
        if (n%i==0)
        {
            f(n/i);
        }
    }
}
int main()
{
    int n;
    cin>>n;
    f(n);
    cout<<e;
    return 0;
}

相關文章