zoukankan      html  css  js  c++  java
  • L1-006 连续因子

    L1-006 连续因子 (20分)
     

    一个正整数 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出来的原因是因为12!(阶乘)足以满足题目的要求,也就是说,不论是多大的数据,连续乘的数字个数都需要小于12,那么我们就从12个数字开始往下逐渐递减。同时,每一次确定连续乘数字个数后,开始计算,我们从2开始,到根号 n 时结束,找到合适的数据即可输出结果了。最后还需要额外注意一下没有的情况即可。

     

    #include<bits/stdc++.h> 
    
    using namespace std;
    
    int main() {
        int n;
        cin>>n; 
        int max = sqrt(n);
        for(int len = 12; len >= 1; len--) {
    for(int start = 2; start <= max; start++) {
    long long int ans = 1; for(int i = start; i - start <= len - 1; i++) ans *= i;
    if(n % ans == 0) { cout<<len<<endl<<start; for(int i = start + 1; i - start <= len - 1; i++) cout<<"*"<<i; return 0;
    } } } cout
    <<1<<endl<<n; return 0; }
  • 相关阅读:
    一些想说的事
    化学离子平衡作业偷懒神器
    solution
    SGU 刷题记
    INT128
    # 字典树的指针写法 1.
    CSP-S2 游记
    Tarjan 【整理】
    HGOI 20191106
    20191101
  • 原文地址:https://www.cnblogs.com/2015-16/p/13540322.html
Copyright © 2011-2022 走看看