zoukankan      html  css  js  c++  java
  • 1722整数因子分解问题(分治算法)

    Description

    大于1的正整数n可以分解为:n=x1*x2*…*xm。例如,当n=12 时,共有8 种不同的分解式:
    12=12;
    12=6*2;
    12=4*3;
    12=3*4;
    12=3*2*2;
    12=2*6;
    12=2*3*2;
    12=2*2*3。
    对于给定的正整数n,计算n共有多少种不同的分解式。

    Input

    输入数据只有一行,有1个正整数n (1≤n≤2000000000)。

    Output

    将计算出的不同的分解式数输出。

    Sample

    Input 

    12

    Output 

    8
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string>
     4 #include <string.h>
     5 #include <algorithm>
     6 #include <math.h>
     7 #include <map>
     8 #include <vector>
     9 
    10 using namespace std;
    11 
    12 int a[100005], top;
    13 
    14 void init(int n)
    15 {
    16     int i;
    17     for(i=1;i<sqrt(n);i++)
    18     {
    19         if(n%i==0)
    20         {
    21             a[top++] = i;
    22             a[top++] = n / i;
    23         }
    24     }
    25     int x = sqrt(n);
    26     if(x*x==n) a[top++] = x;
    27 }
    28 
    29 int op()
    30 {
    31     int re[100005], i, j;
    32     memset(re, 0, sizeof(re));
    33     re[0] = 1;
    34     for(i=0;i<top;i++)
    35     {
    36         for(j=0;j<i;j++)
    37         {
    38             if(a[i]%a[j]==0) re[i]+=re[j];
    39         }
    40     }
    41     return re[top-1];
    42 }
    43 
    44 int main()
    45 {
    46     int n, re;
    47     scanf("%d", &n);
    48     top = 0;
    49     init(n);
    50     sort(a, a+top);
    51     re = op();
    52     printf("%d
    ", re);
    53     return 0;
    54 }
  • 相关阅读:
    Linux 学习
    mac 驱动
    用wubi安装ubuntu
    Eclipse安装Svn
    XML学习
    java集合类总结
    CVS学习
    [转载]java集合类总结
    Servlet学习
    JSP介绍
  • 原文地址:https://www.cnblogs.com/0xiaoyu/p/14089363.html
Copyright © 2011-2022 走看看