PAT 天梯賽練習集 L1 006 連續因子

2022-07-31 23:24:27 字數 1348 閱讀 7067

乙個正整數n的因子中可能存在若干連續的數字。例如630可以分解為3*5*6*7,其中5、6、7就是3個連續的數字。給定任一正整數n,要求編寫程式求出最長連續因子的個數,並輸出最小的連續因子序列。

輸入格式:

輸入在一行中給出乙個正整數n(131)。

輸出格式:

首先在第1行輸出最長連續因子的個數;然後在第2行中按「因子1*因子2*……*因子k」的格式輸出最小的連續因子序列,其中因子按遞增順序輸出,1不算在內。

輸入樣例:

630
輸出樣例:

3

5*6*7

連續因子相乘小於231最大為13!,即連續因子串長度最大為13,預處理把sqrt(231)的範圍內的長度為1-13的連續數字相乘得到的積存在map中,然後遍歷map,找到能被輸入的數整除的包含因子個數最多的、起始位置最小的數,就是答案了。

**:

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define lowbit(x) (x&(-x))

using

namespace

std;

typedef

long

long

ll;const ll lim = (1ll << 31

);map

int,int> >mp;

intmain()

ll tp = 0; int cnt = 0, st = 0

; ll n;

scanf(

"%lld

",&n);

for(mapint,int> >::iterator it = mp.begin();it != mp.end(); it++)

else

if((it->second).first ==cnt)}}

}if(tp)

printf("\n

");}

else printf("

1\n%lld\n

",n);

}

PAT 天梯賽練習集 L1 006 連續因子

acm模版 最開始看錯題了,結果想岔了,用尺取法做了,但是不是說尺取法不能做,只是沒必要用它,直接用陣列存起來所有的因子即可,當然,也可以存一部分因子,畢竟這個結果只和前部分因子以及它本身有關。這裡我用的尺取法,效率還算可以,但是系統有乙個坑,明明說時間限制為400ms,可是10毫秒多一點兒就超時了...

PAT 天梯賽 L1 006 連續因子

乙個正整數n的因子中可能存在若干連續的數字。例如630可以分解為3 5 6 7,其中5 6 7就是3個連續的數字。給定任一正整數n,要求編寫程式求出最長連續因子的個數,並輸出最小的連續因子序列。輸入格式 輸入在一行中給出乙個正整數n 131 輸出格式 首先在第1行輸出最長連續因子的個數 然後在第2行...

PTA 天梯賽練習集 L1 006 連續因子

乙個正整數 n 的因子中可能存在若干連續的數字。例如 630 可以分解為 3 5 6 7,其中 5 6 7 就是 3 個連續的數字。給定任一正整數 n,要求編寫程式求出最長連續因子的個數,並輸出最小的連續因子序列。輸入在一行中給出乙個正整數 n 1首先在第 1 行輸出最長連續因子的個數 然後在第 2...