L1 006 連續因子

2021-08-16 01:18:37 字數 968 閱讀 1478

這道題我被坑的很慘,最開始一看題,就覺得是按照從小到大的順序找出n的所有因子,然後再找出所有因子中最長的連續子因子就好了。設dp[i]為以i結尾,它擁有多少個連續因子。運用動態轉移方程:

if(ss[i] - ss[i - 1] == 1) 

dp[i] = dp[i - 1] + 1;

else

dp[i] = 1;

但是我題目並沒有完全弄清楚,首先n的範圍過大,直接o(n)找因子要超時,必須要用o(sqrt(n))的演算法;其次,輸出需要是最小的連續子因子;然後我還完全沒弄明白連續子因子的概念,也就是說,所有因子相乘必須能夠被n整除,比如樣列,5*6*7 = 210,210可以被630整除。最後還有乙個bug,比如60,它的因子連續的有2,3,4,5,6,它的前面2,3,4不能組成連續因子,因為2*3*4 = 24,24不能被60整除,但是3*4*5 = 60,剛剛可以被60整除。因此它的答案為3*4*5。

最開始這些情況我沒有考慮到,尤其是最後一點。後來我通過網上找**,稍微修改一下,讓它輸出2到100的結果,再與我的**的結果對比,才找出這個bug。

雖然我的**有點醜,但還是上**:

#include #include #include #include #include #include #define maxn 1005

using namespace std;

int main()

mm++;  //mm記有多少個連續因子

}if(n % sum == 0)

dp[i] = mm;

else

dp[i] = mm - 1;

}else

}int re = 0, f = 0;

for(int i = 0; i < m; i++)

}if(re == 0)

else}}

return 0;

}

L1 006 連續因子

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

L1 006 連續因子

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

L1 006 連續因子

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 乙個正整數n的因子中可能存在若干連續的數字。例如630可以分解為3 5 6 7,其中5 6 7就是3個連續的數字。給定任一正整數n,要求編寫程式求出最長連續因子的個數,並輸出最小的連...