测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A26532. 分解因数给出一个正整数 a, 要求分解成若干个正整数的乘积, 即 a = a1 * a2 * a3 * ... * an, 并且 1 < a1 ≤ a2 ≤ a3 ≤ ... ≤ an, 问这样的分解的种数有多少。 注意到 a = a 也是一种分解。输入第 1 行是测试数据的组数 n, 后面跟着 n 行输入。每组测试数据占 1 行, 包括一个正整数 a (1 < a < 32768)输出n 行,…

填空题 中等

题目描述

分解因数

给出一个正整数 a, 要求分解成若干个正整数的乘积, 即 a = a1 * a2 * a3 * ... * an, 并且 1 < a1 ≤ a2 ≤ a3 ≤ ... ≤ an, 问这样的分解的种数有多少。 注意到 a = a 也是一种分解。

输入

第 1 行是测试数据的组数 n, 后面跟着 n 行输入。每组测试数据占 1 行, 包括一个正整数 a (1 < a < 32768)

输出

n 行, 每行输出对应一个输入。 输出应是一个正整数, 指明满足要求的分解的种数

样例输入

2
2
20

样例输出

1
4

参考答案

#include <bits/stdc++.h> using namespace std; //返回数字k分解成由大于等于st的因数乘积的形式的分解方案数 int solve(int k, int st) { if(k == 1)//k为1表示分解结束,形成1种方案 return 1; int ct = 0; for(int i = st; i <= k; ++i) { if(k%i == 0) ct += solve(k/i, i);//分解方案增加:将k/i分解成因数最小为i的分解方案数。 } return ct; } int main() { int n, a; cin >> n; while(n--) { cin >> a; cout << solve(a, 2) << endl;//分解数字a,因数大于等于2 } return 0; }
上一题 下一题