9718 整数因子分解(递归、备忘录法)
来源:互联网 发布:魅族阿里云系统好用吗 编辑:程序博客网 时间:2024/06/09 14:15
9718 整数因子分解
时间限制:1000MS 内存限制:1000K
提交次数:0 通过次数:0
题型: 编程题 语言: C++;C;VC;JAVA
Description
大于1的正整数 n 都可以分解为 n = x1 * x2 * ... * xm例如:当n=12时,共有8种不同的分解式:12 = 1212 = 6*212 = 4*312 = 3*412 = 3*2*212 = 2*612 = 2*3*212 = 2*2*3对于给定正整数n,计算n共有多少种不同的分解式。
输入格式
第一行一个正整数n (1<=n<=1000000)
输出格式
不同的分解式数目
输入样例
12
输出样例
8
提示
此题因子讲顺序的.第一个因子可能是2~n之间的数.比如对12而言,第一个因子可能是2,3,4,6,12.将第一个因子为2的分解个数,加上第一个因子为3的分解个数,...,直至加到第一个因子为12的分解个数.而第一个因子为2的分解个数又是多少呢?是6(因为12/2=6)的分解个数,递归求解!可用“递归”和“备忘录方法”两种方法分别求解,并测试一下效率。递归实现整数因子分解的计数。假设对正整数n的因子分解计数为solve(n)。1)当n=1时,计数加1。2)当n>1时,对n的每个因子i,计算solve(n/i)。
作者
zhengchan
我的实现代码:
#include <iostream>#include <cmath>#include <string.h>using namespace std;int* arr;int len;// 备忘录法,分成2个因子,递归(Good!)int Note(int n){ if (n < len && arr[n] != 0) { return arr[n]; } int count = 1; int q = sqrt(n); for (int i = q; i >= 2; i--) { if (n % i == 0) { if (i * i == n) { count += Note(i); }else{ count += Note(i) + Note(n / i); } } } if (n < len) { arr[n] = count; } return count;}// (纯粹)递归法int solve(int n){ if (n == 1) { return 1; } int count = 1; for (int i = n / 2; i >= 2; i--) { if (n % i == 0) { count += solve(n / i); } } return count;}int main(){ int n; cin >> n; int q = sqrt(n); len = q + 1; arr = new int[len]; memset(arr, 0, len * sizeof(int)); cout << Note(n) << endl;//备忘录法 cout << solve(n) << endl;//纯递归法 cout << endl; return 0;}
0 0
- 9718 整数因子分解(递归、备忘录法)
- 分解整数因子乘积(递归)
- 9718 整数因子分解
- 9718 整数因子分解
- 整数因子分解:计算一个整数所有的分解式(递归实现)
- 整数因子分解问题--递归--动态规划
- 整数因子分解(转)
- 整数分解(递归)
- SDUT 1722-整数因子分解问题(因子分解)
- scau 9718 整数因子分解(优先做)
- 整数因子分解
- 整数因子分解问题
- 整数因子分解问题
- 整数因子分解问题
- 整数因子分解问题
- 整数因子分解问题
- 整数因子分解问题
- 整数因子分解问题
- C++ 输入输出外挂 整数
- 浮点数的优缺点
- 大公司的边角料人才
- POJ 3678 Katu Puzzle(2-sat)
- 【十一】注入框架RoboGuice使用:(Your First Injection into a Custom View class)
- 9718 整数因子分解(递归、备忘录法)
- 【DButiles学习之】对数据库增删改
- workerman-chat的安装方法
- poj3244 Difference between Triplets
- Hadoop实验:wordcount
- bzoj 2301: [HAOI2011]Problem b
- 7.30 iOS 5.0中,导航条引入了 在一侧设置多个UIBarbuttonItem方法
- Qt表格之Model/View实现
- INSERT