P2618 數字工程

2021-10-14 16:46:14 字數 994 閱讀 4691

題目描述

acm 實驗室開啟了乙個數字工程專案,希望把正整數 nn 通過一些特殊方法變成 11。

可採用的方法有:

1.減去 1

2.除以它的任意乙個素因子。

每操作一次消耗乙個單位的能量。

請問把 nn 變成 11 最少需要消耗多少能量?

輸入格式

本題有多組資料。

對於每組測試,一行乙個整數 nn。

輸出格式

一行乙個整數,表示最少消耗的能量。

輸入輸出樣例

輸入 #114

輸出 #102

思路:看到這一道題,順便一看標籤(數論,dp), 題目說了每乙個數的兩種變化方法,自然先用線性篩把質數篩出來,之後從2開始dp,每次找它減1的dp,與用它為因子的dp,按照線性篩的思路,一直往上dp即可,最後直接輸出dp[n],注意加』\n』。

#include

#include

const

int maxn =

1e6;

bool vis[maxn +5]

;int dp[maxn +5]

, mark[maxn +5]

, cnt;

intmin

(int x,

int y)

intmain()

for(

int j =

1; i <= maxn / mark[j]

&& j <= cnt; j ++

)} dp[1]

=0;for

(int i =

2; i <= maxn; i ++)}

while

(scanf

("%d"

,&n)

!=eof

)}

Luogu P2618 數字工程

根據題目下面的提示 說明,我們就能知道做這個題的大體思路 先求出來每乙個數的素數因子,然後就開始dp。求素數因子的方法就是用類似於尤拉篩的操作,倘若乙個數一直都沒有被篩到過,那麼ta就是乙個素數,然後我們就可以用ta來繼續篩其它的數,並且我們只用篩ta的倍數,因為只有ta的倍數才含有這個素因子,被篩...

P1756 數字反轉

給定乙個整數,請將該數各個位上數字反轉得到乙個新數。新數也應滿足整數的常見形式,即除非給定的原數為零,否則反轉後得到的新數的最高位數字不應為零 參見樣例2 輸入共1 行,乙個整數n。輸出共1 行,乙個整數,表示反轉後的新數。123321 380 83 用字串來處理數值。反轉函式 include re...

P1043 數字遊戲

丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k...