连续因子pta c语言,PTA --- L1-006 连续因子

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

输入格式:

输入在一行中给出一个正整数 N(1

输出格式:

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

输入样例:

630

输出样例:

3

思路:

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

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

#include

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 ;

}

23910b8581ea4b39f93a4a6634aa87b6.png

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

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

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

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

针对因数判定开始的数字,往后连续乘当前循环判定的序列的长度的数字;

根据连续乘所得的数字判定是否是n的因子,如果是,则退出循环,否则继续;

}

}

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

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

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

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

#include

#include

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

prd*=i;

if(n%prd==)//如果找到乘积因子

{

flag=;

break;//标识,及时退出

}

}

if(flag)

break;

}

if(!flag)//如果未标识为1,说明是质数

cout<<<

else

{

cout<

for(int i=start+;i

cout<

}

return ;

}

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

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

L1-006&period; 连续因子

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

pat L1-006&period; 连续因子

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

PTA L1题目合集(更新至2019&period;3)

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

L1-006 连续因子 (20 分&rpar; 模拟

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

L1-006 连续因子(20)(思路&plus;测试点分析)

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

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

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

PAT 天梯赛 L1-006&period; 连续因子 【循环】

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

团体程序设计天梯赛-练习集L1-006&period; &ast;连续因子

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

随机推荐

java 集合 Connection 栈 队列 及一些常用

集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

&lbrack;LeetCode&rsqb; Valid Parentheses

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

js获取一个对象的所以属性和值

在HTML DOM中,获取某个元素对象的时候,往往记不住它的很多属性,可以通过下面的例子来查找一下:

& ...

imageNamed 与 imageWithContentsOfFile的区别

如题,是不是大家为了方便都这样加载图片啊 myImage = [UIImage imageNamed:@"icon.png"];那么小心了这种方法在一些图片很少,或者图片很小的程序 ...

【仿携程JQuery日期价格表】

今天比较闲所以就花点时间又写了点东西. 相信这种价格表大家不会陌生 现在我就模仿它做一个简单版本的.效果如下 首先需要两个时间控件,我这里用的是HTML5里面的时间控件,这个没限制喜欢用什么就用什么 ...

html5权威指南:标记文字

html5权威指南-第八章-用基本的文字元素标记内容 :http://www.cnblogs.com/yc-755909659/archive/2016/10/02/5928122.html html ...

xcode 没有 iphone4s 模拟器 的解决方法&period;&period;

项目需要iphone 4s 测试. 首先是Xcode 8 没有 iphone 4s的模拟器了. 由于线上安装的方式,不管是在code的add simulator 还是 ruby gem 的code-i ...

springboot集成elasticsearch

在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用: 在进阶阶段可以需要学习ES的底层原理,如何通过Version来实现乐观锁保证ES不出问题等核心原理: 第 ...

webrtc学习&colon; 部署stun和turn服务器

webrtc的P2P穿透部分是由libjingle实现的. 步骤顺序大概是这样的: 1. 尝试直连. 2. 通过stun服务器进行穿透 3. 无法穿透则通过turn服务器中转. stun 服务器比较简 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值