天梯赛L1-006连续因子
2018-03-15 23:09
204 查看
L1-006. 连续因子
时间限制400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数N(1<N<231)。
输出格式:
首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
输入样例:
630
输出样例:
3 5*6*7
感谢https://www.liuchuo.net/archives/1590 提供了解题思路
首先 要判断是不是素数 因为素数没有除1和自己之外的因子 所以上来直接判断 如果是的话直接输出这个数字本身 长度为1
如果不是素数,那么从因子2开始找 找连乘并且可以被n整除的序列 然后记录起始点和终点 长度 最后输出即可
#include<bits/stdc++.h> using namespace std; bool isPrime(int n) { if(n == 2 || n == 3) return true; if(n % 6 != 1 && n % 6 != 5) return false; int t = sqrt(n); for(int i = 2;i <= t;i ++) { if(n % i == 0 || n % (i+2) == 0) return false; } return true; } int main() { int n; cin >> n; int maxlen = 0; int start,end; int tmp = sqrt(n); if(isPrime(n)) { cout << 1 << endl << n; return 0; } int sum,j; for(int i = 2;i <= tmp;i ++) { if(n % i == 0) { sum = i; for(j = i + 1;j <= tmp;j ++) { sum *= j; if(n % sum != 0) break; } if(maxlen < j - i) { maxlen = j - i; start = i; end = j; } } } cout << maxlen << endl; for(int i = start;i < end;i ++) { if(i == start) cout << i; else cout << "*" << i; } return 0; }
相关文章推荐
- PAT-天梯赛练习集-L1-006-连续因子
- 团体程序设计天梯赛-练习集-L1-006. 连续因子
- L1-006. 连续因子(天梯赛)
- PAT 天梯赛 L1-006. 连续因子 【循环】
- 天梯赛L1-006. 连续因子
- 团体程序设计天梯赛-练习集 L1-006. 连续因子 JAVA
- 团体程序设计天梯赛-练习集L1-006. 连续因子
- PAT-团体程序设计天梯赛-练习集-L1-006. 连续因子
- L1-006. 连续因子-PAT团体程序设计天梯赛
- 团体程序设计天梯赛-练习集L1-006. *连续因子
- PAT团体程序设计天梯赛 L1-006. 连续因子
- L1-006 连续因子-团体程序设计天梯赛-练习
- L1-006. 连续因子
- L1-006. 连续因子
- L1-006. 连续因子
- L1-006.连续因子
- L1-006. 连续因子
- L1-006. 连续因子
- L1-006. 连续因子
- L1-006. 连续因子