• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
PAT 1096 Consecutive Factors
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.

Input Specification:

Each input file contains one test case, which gives the integer N (1<N<).

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.

Sample Input:

630

Sample Output:

3
5*6*7
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;


int main(){
    ll n;
    cin >> n;
    int maxlen = 0;
    ll pos = 0;

//    if(n==1){cout << 0 << endl;return 0;}
//    if(n==2){cout << 1 << endl << 2;return 0;}
//    if(n==3){cout << 1 << endl << 3;return 0;}






    for(ll i=2;i <= sqrt(n)+1;i++){
        int cnt = 0;
        ll t = i;
        ll nt = n;
        while(nt%t == 0&&nt){
            cnt++;
            nt = nt/t;
            t++;
        }
        if(cnt > maxlen){
            maxlen = cnt;
            pos = i;
        }
    }
    if(maxlen == 0){
        cout << 1 << endl << n;
        return 0;
    }

    cout << maxlen << endl;
    for(int i=0;i < maxlen;i++){
        cout << pos+i;
        if(i!=maxlen-1)
            cout << "*";
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;


int main(){
    ll n;
    cin >> n;
    int maxlen = 0;
    ll pos = 0;

//    if(n==1){cout << 0 << endl;return 0;}
//    if(n==2){cout << 1 << endl << 2;return 0;}
//    if(n==3){cout << 1 << endl << 3;return 0;}






    for(ll i=2;i <= sqrt(n)+1;i++){
        int cnt = 0;
        ll t = i;
        ll nt = n;
        while(nt%t == 0&&nt){
            cnt++;
            nt = nt/t;
            t++;
        }
        if(cnt > maxlen){
            maxlen = cnt;
            pos = i;
        }
    }
    if(maxlen == 0){
        cout << 1 << endl << n;
        return 0;
    }

    cout << maxlen << endl;
    for(int i=0;i < maxlen;i++){
        cout << pos+i;
        if(i!=maxlen-1)
            cout << "*";
    }
    return 0;
}

如果n为质数的情况要特殊判断。

 
posted on 2019-04-30 09:22  村雨sup  阅读(154)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3