题目地址

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数 N(1<N<2^31​​)。

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:

630

输出样例:

3

思路:

首先,题目求的是    最长连续因子的个数 + 升序排序的连续因子的序列

由题目,数据的范围是 2~ 2^30 -1,可以借此推算得到序列的最长长度

#include<stdio.h>
int main(){
int u =;
for(int i = ;i< ;i++){
u = u *;
}
int sum = ;
for(int i = ;i < ;i++)
{
sum = sum * i;
if(sum >= u){
printf("%d %d\n",i,sum);
break;
}
}
return ;
}

可见,当序列的最长长度(1*2*3*4.....*12)时,所得值仍在数据范围之内,当继续乘到13时,超出数据的范围,可见,在数据范围内,整个序列的最大连续长度为12

而对于求一个数n的因子,只需要判定从 2  ~  √n  是否存在因数即可:

那么接下来就可以,从序列的最大长度12往下暴力循环{

  每次循环内部都从2开始做为因数判定开始的数字,直到 √n{

    针对因数判定开始的数字,往后连续乘当前循环判定的序列的长度的数字;
    根据连续乘所得的数字判定是否是n的因子,如果是,则退出循环,否则继续;
  } }

最后根据 因数判定开始的数字 + 序列的长度,输出连续的序列即可

为什么会得到 最长连续因子的个数 ?

因为是从最长的因子序列的长度(12)、最小的因子开始循环判定(2),保证了一旦发现有这样的序列的积是它的因子,那么这样的序列必然是最长的连续序列。

# 注解:为了达到最长的因子序列的目的,应使 4*5*6 ==> 2*3*4*5 。所以,可以由长度最大、序列开始因子最小开始暴力循环,进行寻找。

#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
int main()
{
ll n;
cin>>n;
ll prd;
int rootn=sqrt(n);//得到根号N
int flag=,start,len;//定义是否为乘积因子的标识,乘积序列开始的因子,序列长度
for(len=;len>=;len--)//序列最长为12,递减到1
{
for(start=;start<=rootn;start++)//从当前一轮乘积因子的上界从2开始到根号N,注意一定是小于等于,否则有一个点会不过
{
prd=;
for(int i=start;i<start+len;i++)//从当前乘积因子开始乘积,乘积len个长度
prd*=i;
if(n%prd==)//如果找到乘积因子
{
flag=;
break;//标识,及时退出
}
}
if(flag)
break;
}
if(!flag)//如果未标识为1,说明是质数
cout<<<<endl<<n;
else
{
cout<<len<<endl<<start;
for(int i=start+;i<start+len;i++)//输出,如果只有1个输出一个
cout<<'*'<<i;
}
return ;
}

PTA --- L1-006 连续因子的更多相关文章

  1. PTA L1-006 连续因子【暴力模拟】

    一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为3*5*6*7,其中5.6.7就是3个连续的数字.给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列. 输入 ...

  2. L1-006. 连续因子

    https://www.patest.cn/contests/gplt/L1-006 题目地址 在上面 一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为3*5*6*7,其中5.6.7就 ...

  3. pat L1-006. 连续因子

    L1-006. 连续因子 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个正整数N的因子中可能存在若干连续的数字.例如630 ...

  4. PTA L1题目合集(更新至2019.3)

    L1-001 Hello World (5 分) 链接:https://pintia.cn/problem-sets/994805046380707840/problems/9948051471320 ...

  5. L1-006 连续因子 (20 分) 模拟

    一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的 ...

  6. L1-006 连续因子(20)(思路+测试点分析)

    L1-006 连续因子(20 分) 一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序 ...

  7. 天梯赛 L1-006 连续因子 (模拟)

    一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为356*7,其中5.6.7就是3个连续的数字.给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列. 输入格式 ...

  8. PAT 天梯赛 L1-006. 连续因子 【循环】

    题目链接 https://www.patest.cn/contests/gplt/L1-006 思路 输出的连续因子 的乘积 也要是这个数的因子 就每个数先找它的单因子 然后每个单因子往上一个一个遍历 ...

  9. 团体程序设计天梯赛-练习集L1-006. *连续因子

    L1-006. 连续因子 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个正整数N的因子中可能存在若干连续的数字.例如630 ...

随机推荐

  1. vue今日总结

    ''' 复习 ''' """ 1.vue框架的优势 中文API 单一面应用 - 提升移动端app运行速度 数据的双向绑定 - 变量全局通用 数据驱动 - 只用考虑数据,不 ...

  2. myeclipse 关闭jsp悬浮提示

    myeclipse越来越智能,身为码农的我却越来越伤心.虽然你很智能,但请你提供一些有用的信息给我,不要乱七八槽的,不问青红皂白就塞一大堆提示给我,对不起,哥不需要这些!!! 都知道,使用myecli ...

  3. win10 出现 No AMD graphics driver is installed or the AMD driver is not functioning properly .....

    原因:win10的自动更新的功能没有关闭,更新有时候会出现显卡驱动更新不及时出现的问题. 解决方法一:使用 驱动人生(或者等等....) 进行升级驱动. 解决方法二:手动升级. 1.打开设备管理器 2 ...

  4. BZOJ 1453 (线段树+并查集)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1453 题意:一个 n*n 的矩阵,每个位置有黑/白两种颜色,有 m 次操作,每次可以翻转 ...

  5. Markdown使用教程(转载收藏)

    基础语法 标题 Markdown支持6种级别的标题,对应html标签 h1 ~ h6 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 以上标记效果如下: h1 ...

  6. ubuntu16.04卡死的解决办法

    1.输入命令:top 找到chrome所占用的线程的pid. 2.kill pid

  7. PHP处理base64编码字符串

    接收前端传过来的base64编码后的字符串, 如果是json字符串, 那么PHP使用file_get_contents('php://input'); 来接收. 本次这里是以post传参的形式传bas ...

  8. word文档的图片怎么保存到ueditor上

    word图片转存,是指UEditor为了解决用户从word中复制了一篇图文混排的文章粘贴到编辑器之后,word文章中的图片数据无法显示在编辑器中,也无法提交到服务器上的问题而开发的一个操作简便的图片转 ...

  9. learning armbian steps(9) ----- armbian 源码分析(四)

    在上一节的分析当中,我们知道是通过对话框来选择到底编译的是哪块板子,基于什么样的配置. 接下来我们来拿一个实例来分析一下具体的案例,我们会选中如下所示的版本 iotx-3 AM335X 1Gb SoC ...

  10. [Shell]常用语法

    赋值 FILE=$1 //=两边不能有空格 echo $FILE 逻辑判断 表达式 .if [ expression ]; then ... fi //[]两边必须有空格 . if [[ expres ...