描述
小苯定义一个数字的权值为:该数字的因子个数。
小苯现在拿到了一个正整数 x,他希望将 x 分解为若干不等于 1 的数字(也可以不做分解),使得所有分解出的正整数乘积等于 x,且所有数字的权值之和尽可能大,你能帮帮他求出最大的权值吗。输入描述:
输入包含 T+1 行。
第一行一个正整数 T (1≤T≤10^4),表示数据组数。
接下来 T 行,每行一个正整数 x (2≤x≤2×10^5),表示每组数据中小苯询问的数字 x。输出描述:
输出包含 T 行,每行一个正整数表示每组测试数据的最大权值和。
示例1
输入:
3 2 10 123输出:
2 4 4说明:
第一个测试数据中,无法分解,直接取 2 的权值为 2。 第二个测试数据中,将 10 分解为 2×5,权值和为 4。
一、问题分析
首先读题,仔细看描述中的内容,发现需求是
1.给定T组数据
2.每组数据包含一个正整数x
3.求x的权值,
4.权值的意思应该就是x存在的因子的个数
二、解题思路
1.还不太明白
三、具体步骤
使用的语言是C
#include <stdio.h>
#include <math.h>
#define N 300010
#define M 1010
int a[N];
void solve() {
int x;
scanf("%d", &x);
int maxx = 0;
int sum = 1;
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
int cnt = 0;
while (x % i == 0) {
x /= i;
cnt++;
}
sum *= (cnt + 1);
maxx = (maxx > cnt * 2)? maxx : cnt * 2;
}
}
if (x > 1) {
maxx = (maxx > 2)? maxx : 2;
sum *= 2;
}
printf("%d\n", (maxx > sum)? maxx : sum);
}
int main() {
int _;
scanf("%d", &_);
while (_--) {
solve();
}
return 0;
}
530

被折叠的 条评论
为什么被折叠?



