PTA --- L1-006 连续因子
一个正整数 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 连续因子的更多相关文章
- PTA L1-006 连续因子【暴力模拟】
一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为3*5*6*7,其中5.6.7就是3个连续的数字.给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列. 输入 ...
- L1-006. 连续因子
https://www.patest.cn/contests/gplt/L1-006 题目地址 在上面 一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为3*5*6*7,其中5.6.7就 ...
- pat L1-006. 连续因子
L1-006. 连续因子 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个正整数N的因子中可能存在若干连续的数字.例如630 ...
- PTA L1题目合集(更新至2019.3)
L1-001 Hello World (5 分) 链接:https://pintia.cn/problem-sets/994805046380707840/problems/9948051471320 ...
- L1-006 连续因子 (20 分) 模拟
一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的 ...
- L1-006 连续因子(20)(思路+测试点分析)
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. 连续因子 【循环】
题目链接 https://www.patest.cn/contests/gplt/L1-006 思路 输出的连续因子 的乘积 也要是这个数的因子 就每个数先找它的单因子 然后每个单因子往上一个一个遍历 ...
- 团体程序设计天梯赛-练习集L1-006. *连续因子
L1-006. 连续因子 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个正整数N的因子中可能存在若干连续的数字.例如630 ...
随机推荐
- JDBC上
JDBC实战--打通数据库 代码实现: package com.imooc.db; import java.sql.Connection; import java.sql.DriverManager; ...
- RHEL6 学习:使用 cryptsetup 给分区加密
RHEL6 学习:使用 cryptsetup 给分区加密 今天学习了 RHEL 对硬盘分区加密的知识,在 RHEL 系统里可以通过使用 cryptsetup 工具对硬盘分区进行加密,加密后的分区需要输 ...
- JavaScript程序设计——FOR循环
FOR循环流程图: 1.编写求6!的阶乘的代码 2.编写10个10相加的和 3.编写1+2+3+...+10连续相加的和 4.编写1+(1+2)+(1+2+3)+...+(1+2+3+...+10)连 ...
- access denied
背景: 想要使用nginx转发 实现一个输出PHPinfo的页面, 比如: 访问 aaa.com/phpinfo 浏览器显示phpinfo的信息, 因为有的时候需要查看phpinfo, 所以想单独 ...
- 013_STM32程序移植之_DS18B20
013_STM32程序移植之_DS18B20 1. 测试环境:STM32C8T6 2. 测试模块:DS18B20模块 3. 测试接口: 1. DS18B20模块接口: DS18B20引脚 ...
- 【luoguP3959 宝藏】-状压DP
题目描述: 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...
- 新西达电调初始化代码,使用nodejs ffi技术调用wiringpi,代码使用typescript编写
这是我设计的F450四轴飞行器飞控代码的一部分 运行在orangepi-zero上,操作系统是armbian,思路是使用node-ffi调用wiringpi的so库与GPIO通信,然后控制端逻辑代码使 ...
- codeforces364D
Ghd CodeForces - 364D John Doe offered his sister Jane Doe find the gcd of some set of numbers a. Gc ...
- Restorator 2018 v3.90汉化注册版 含注册码汉化激活教程
链接:https://pan.baidu.com/s/1wfh5VQfNgbDr-glezL4faQ 提取码:y507
- 用ST解决RMQ问题
用ST算法解决RMQ(区间最值问题) 在解决CF上的6E Exposition时,用到了RMQ+二分的方法.学习了用ST来快速解决RMQ问题,因此做一个小记 建表 用DP的方式来建ST. dp[i][ ...