[code] PTA 胡凡算法笔记 DAY049
Posted wait_for_that_day5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[code] PTA 胡凡算法笔记 DAY049相关的知识,希望对你有一定的参考价值。
文章目录
题目 A1096 Consecutive Factors
-
题意
输入数字N
,求一段连续的整数序列,其乘积为N
的因子。求最长的连续序列,输出长度及序列。如果存在多个序列长度相同的情况,输出最小的序列。 -
思路
首先需要确定思路,是采用构造连续整数乘积判断是否能被n
整除的方式。然后确定范围,最大为sqrt(n)
。然后再就是存储结果的方式,采取存储连续序列的第一个数和长度的方式,遇到长度更大的情况时更新,这样即可以保证更新的方便也可以满足获取的是长度相同情况下最小的序列。 -
Code in C++
#include <cstdio>
#include <cmath>
int main()
long long n;
scanf("%lld", &n);
long long sqrn = std::sqrt(n), lenth = 0, start = 0;
// 遍历连续因子第一个数从[2,sqrt(n)]
for (int i = 2; i <= sqrn; ++i)
long long j = i, tmp = 1;
while(1)
tmp *= j;
if (n % tmp != 0) break;
if (j - i + 1 > lenth)
lenth = j - i + 1;
start = i;
++j;
// 如果无解,只有自身是自己的因子
if (lenth == 0)
printf("1\\n%lld", n);
else
printf("%lld\\n", lenth);
for (int i = 0; i < lenth; ++i)
if (i > 0) printf("*");
printf("%lld", start + i);
return 0;
小结
- 确定因子遍历范围
- 构造连续整数乘积作为因子去判断
- 利用存储第一个整数和长度的方式保存结果
以上是关于[code] PTA 胡凡算法笔记 DAY049的主要内容,如果未能解决你的问题,请参考以下文章