C/C++教程

C++解PTA A1096Conse

本文主要是介绍C++解PTA A1096Conse,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1096 Consecutive Factors (20 分)
Among all the factors of a positive integer N, there may exist several consecutive numbers. For example, 630 can be factored as 3×5×6×7, where 5, 6, and 7 are the three consecutive numbers. Now given any positive N, you are supposed to find the maximum number of consecutive factors, and list the smallest sequence of the consecutive factors.

几乎所有整数的N的因子,可能存在连续的数字,举个例子,630因子可以是,356*7,5,6,7是三个因子,现在给你一个个整数N,要求你找出最大的连续因素,列出最小的连续因子。

Input Specification:
Each input file contains one test case, which gives the integer N (1<N<2 31).

输入规格,每个输入文件包含一个测试样例,给出一个N大于1小于2^31

Output Specification:
For each test case, print in the first line the maximum number of consecutive factors. Then in the second line, print the smallest sequence of the consecutive factors in the format factor[1]factor[2]…*factor[k], where the factors are listed in increasing order, and 1 is NOT included.

输出规格,针对每个测试文件,第一行打印最大的连续因子数,然后第二行打印最小连续因子序列,以这种形式因子1*因子2,所有因子升序,1不包括进去.

Sample Input:

630

Sample Output:

3
5*6*7

核心思路

要完整模拟整个过程,建议数据要长整型。

完整代码

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
    //亮点,长质数
    ll N;
    cin >> N;
    ll i,j,k;
    ll ans_start = N;
    ll ans_length = 1;
    for(i=2;i<=sqrt(N);i++){
        for(j=i,k=N;k%j==0;j++){
            k/=j;
        }
        if(j-i>ans_length||(j-i==ans_length&&i<ans_start)){
            ans_length =j-i;
            ans_start = i;
        }
    }
    cout << ans_length << endl;
    for(i=ans_start;i<ans_start+ans_length;i++){
        if(i>ans_start)cout << "*";
        cout << i;
    }
}


这篇关于C++解PTA A1096Conse的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!