L1-6 连续因子 (新的开始

一个正整数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

解题思路:

通过12! < 231 可知最多连续不超过12个数,之后由于小的连续序列一定更长,从最长最小的可能序列开始暴力枚举

 1 #include<cstdio>
 2
 3 int main(void)
 4 {
 5     int n;
 6     scanf("%d", &n);
 7
 8     int i = 2;
 9     while(n % i != 0){
10         i++;
11     }
12     int m = n / i, max = 0;
13
14     int len, st, first = 1;
15     for(int i = 2; i < m; i++){
16         int j = i + 1, sum = i;
17         while(sum < n){
18             sum *= j;
19             j++;
20         }
21         if(sum == n && first){
22             st = i; len = j - 1;
23             first = 0;
24         }
25         else if(sum == n){
26             if(j - i > max) max = j - i;
27         }
28     }
29
30     printf("%d\n", max);
31     first = 1;
32     for(int k = st; k <= len; k++){
33         if(first){
34             printf("%d", k); first = 0;
35         }
36         else printf("*%d", k);
37     }
38
39     return 0;
40 }

原文地址:https://www.cnblogs.com/fatcatm/p/8379622.html

时间: 2024-10-11 05:51:17

L1-6 连续因子 (新的开始的相关文章

CCCC 连续因子

题意: 一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为3*5*6*7,其中5.6.7就是3个连续的数字.给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列. 输入格式: 输入在一行中给出一个正整数N(1<N<231). 输出格式: 首先在第1行输出最长连续因子的个数:然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内. 分析:暴力. #include<bits/stdc++.h&g

连续因子

题目: 思路:连续因子的范围一定是从1到sqrt(N),因为如果有一个数超过sqrt(N)了,那么无论它与前一个数还是后一个数相乘都会大于N.所以在1到sqrt(N)中暴力找出能被N整除的连续相乘的数串即可.如果N是质数,要另作考虑,输出的结果就是1和N. 上代码: import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub

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

一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列. 输入格式: 输入在一行中给出一个正整数 N(1). 输出格式: 首先在第 1 行输出最长连续因子的个数:然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内. 输入样例: 630 输出样例: 3 5*6*7 #incl

L1-006 连续因子 (20分)

题意分析 题目中已经将意思说的很清楚了,就是输出一个数的最长连续因子的个数,并且输出是哪几个因子相乘.可以将题目从这两个角度进行分析: N为素数时,最长连续因子的个数为1,即它自己. N不为素数时,即N为合数时,暴力模拟即可,将连续的数进行累积,直到累积后的结果不能被N整除为止,这样就能够不断更新最长连续因子的个数,预保留第一个数,就可以在最终输出是能够直接输出这几个连续因子. AC代码 #include<iostream> #include<cstdio> #include<

pta_l1-6(连续因子)

题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805138600869888 题意:给定n,求n的最长的连续子因子的长度,且输出最小的序列. 思路:我最开始就是暴力搜的,搜到最长的存下来即可,但忽略了我找的因子的乘积可能大于n,后来也没想到什么好的办法,然后参考了别人的题解.首先给出12!=479001600<231<13!=6227020800,这个要记住,从这可以看出n最长的连续子因子长度不会超过12,

L1-006. 连续因子

#include <iostream>using namespace std;#include <cmath>int main(){ int n, t, i, j; int num; int s; cin >> n; t = n; num = 0, s = 0; for (i = 2; i <= sqrt(n) + 1; i++) if (n%i == 0) {  t = n / i;  for (j = i + 1; j <= sqrt(n) + 1; j

数据库索引的填充因子

举个例子:假定你刚刚用缺省的填充因子新创建了一个索引.当sqlserver创建它时,它把索引放在相邻的物理页面上,因为数据能够顺序的读所以这样会有最优的i/o访问.但当表随着..增加和改变时,发生了页拆分.当页拆分发生时,sqlserver必须在磁盘的某处分配一个新的页,这些新的页和最初的物理页不是连续的.因此,访问使用的是随机的i/o,而不是有顺序的i/o,这样访问索引页会变得更慢.      那么理想的填充因子是多少呢?它依赖于应用程序对sqlserver表的读和写的比率.首要的原则,按照下

sql索引的填充因子多少最好,填充因子的作用?

当创建一个新索引,或重建一个存在的索引时,你可以指定一个填充因子,它是在索引创建时索引里的数据页被填充的数量.填充因子设置为100意味着每个索引页100%填满,50%意味着每个索引页50%填满. 如果你创建一个填充因子为100的聚集索引(在一个非单调递增的列上),那意味着每当一个记录被插入(或修改)时,页拆分都会发生,因为在现存的页上没有这些数据的空间.很多的页拆分会降低sqlserver的性能. 举个例子:假定你刚刚用缺省的填充因子新创建了一个索引.当sqlserver创建它时,它把索引放在相

sql索引的填充因子多少最好,填充因子有什么用

    和索引重建最相关的是填充因子.当创建一个新索引,或重建一个存在的索引时,你可以指定一个填充因子,它是在索引创建时索引里的数据页被填充的数量.填充因子设置为100意味着每个索引页100%填满,50%意味着每个索引页50%填满.如果你创建一个填充因子为100的聚集索引(在一个非单调递增的列上),那意味着每当一个记录被插入(或修改)时,页拆分都会发生,因为在现存的页上没有这些数据的空间.很多的页拆分会降低sqlserver的性能.举个例子:假定你刚刚用缺省的填充因子新创建了一个索引.当sqls