题意:一个正整数n可以分解成一系列因子的乘积,其中会存在连续的因子相乘,如630=3*5*6*7,5*6*7即为连续的因子。给定n,让你求最大的连续因子个数,并且输出其中最小的连续序列。

比如一个数可以分解2*3*4*6*7*8,最大的连续个数为3,因为存在两个,输出最小的那个即2*3*4。

首先,一个数如果是合数,那么它的因子必定不会超过sqrt(n)或者sqrt(n)+1。如果为质数,那么只可能为自己,因为题目说了不包括1。

我们先将2~sqrt(n)+1中为n的因子存到factor数组中,然后枚举以每个factor[i]开始的情况,看与后面的是否连续,每连续一个,都要判断乘积是否为n的约数,如果是并且大于目前最大的长度,即更新。连续中断,则从下一个factor[i+1]开始。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
const int maxn=<<;
int n;
int cnt;
int factor[maxn];
/*
初始化n所有可能的因子
如果n不为质数,那么n最大的因子<=sqrt(n)+1
*/
void init(int n){
cnt=;
int k=sqrt(n+0.5);
//这里要注意是k+1,比如20=4*5
for(int i=;i<=k+;i++){
if(n%i==){
factor[cnt++]=i;
}
}
}
int main()
{
//printf("%d\n",(1<<31)-1);
scanf("%d",&n);
init(n);
int maximum=;
int l,r,q;
/*
枚举以每个factor[i]开始的情况
q为连续的个数
*/
for(int i=;i<cnt;i++){
q=;
int sum=;
while(factor[i+q]==factor[i]+q && sum*factor[i+q]<=n){
sum*=factor[i+q];
q++;
if(n%sum== && q>maximum){
l=i;
r=i+q-;
maximum=q;
} } }
if(cnt>){
printf("%d\n",maximum);
printf("%d",factor[l]);
for(int i=l+;i<=r;i++)
printf("*%d",factor[i]);
}
//若n为质数
else{
printf("1\n");
printf("%d",n);
}
return ;
}

PAT甲题题解-1096. Consecutive Factors(20)-(枚举)的更多相关文章

  1. PAT (Advanced Level) Practise - 1096. Consecutive Factors (20)

    http://www.patest.cn/contests/pat-a-practise/1096 Among all the factors of a positive integer N, the ...

  2. PAT甲题题解-1041. Be Unique (20)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789189.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  3. PAT甲题题解-1050. String Subtraction (20)-水题

    #include <iostream> #include <cstdio> #include <string.h> #include <algorithm&g ...

  4. PAT甲题题解-1059. Prime Factors (25)-素数筛选法

    用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...

  5. PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算

    输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出如果为负数,则带分数两边要有括号如果除数为0,则式子中的结果输出Inf模拟题最好自己动手实现,考验 ...

  6. PAT甲题题解-1108. Finding Average (20)-字符串处理

    求给出数的平均数,当然有些是不符合格式的,要输出该数不是合法的. 这里我写了函数来判断是否符合题目要求的数字,有点麻烦. #include <iostream> #include < ...

  7. PAT甲题题解-1120. Friend Numbers (20)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789775.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  8. PAT甲题题解-1015. Reversible Primes (20)-素数

    先判断n是否为素数然后把n转化成d进制下再反转,转化为十进制的num判断num是否为素数 注意n为0和1时,不是素数!!!注意反转后的num也有可能为1,不是素数!!! #include <io ...

  9. PAT甲题题解-1042. Shuffling Machine (20)-模拟

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789205.html特别不喜欢那些随便转载别人的原创文章又不给 ...

随机推荐

  1. Hexo搭建博客笔记

    Hexo搭建(建议看ppt:https://files.cnblogs.com/files/-SANG/%E4%BD%A0%E7%9A%84%E7%8C%AB.pptx ) 安装Git https:/ ...

  2. Arcgis创建SDE_Geometry、SDO_Geometry的区别

    先初略的了解下SDE_Geometry和SDO_Geometry的区别: 1. SDO_GEOMETRY Oracle Spatial在MDSYS模式下定义了一系列几何类型.函数来支持空间数据的存储和 ...

  3. linux 邮件工具利器sendEmail时效超好

    下载:http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz 安装方法: ) Extract the pac ...

  4. [转]学习C#:Attribute与Property

    一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAttribute [AttributeUsage(AttributeTargets.Class)] ...

  5. create_buffer_tree example

    假设这样一种情况: 绕线完修完timing 后,designer 修改了netlist,给了eco.v,其中改动了 clock tree 的一个分支,导致这个分支上的buffer 都没有了,如下图 一 ...

  6. Mac 下搭建服务器

    1.开启服务器 Apache. sudo apachectl -k start 打开浏览器,在地址栏输入 localhost,如果出现 It works! 那么第一步已经成功了,如果没成功---出门左 ...

  7. 安装Docker的三种方式

    本人在安装docker时之前一直采用的是系统自带的docker软件包安装,导致下载的docker不是最新版本,因此会有很多docker命令无法使用,例如network等等,现将安装docker的方式总 ...

  8. Swoole Task 的应用

    目录 概述 代码 小结 扩展 参考文档 概述 Swoole 异步Task,主要实现调用异步任务的执行. 常用的场景:异步支付处理.异步订单处理.异步日志处理.异步发送邮件/短信等. Swoole 的实 ...

  9. 20155234《网路对抗》Exp9 WEB安全基础

    20155234 Exp9 Web安全基础 基础问答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意 ...

  10. 20155305《网络对抗》Web安全基础实践

    20155305<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...