一群小青蛙呱蹦呱蹦呱

2021-10-21 11:32:47 字數 1954 閱讀 4872

題目描述

有n個格仔,每個格仔裡有乙個數,1,2,3,4…n

牛牛放出無窮只青蛙。

第一只青蛙的路線是:1->2->4->8->16->…

第二隻青蛙的路線是:1->3->9->27->81->…

第三隻青蛙的路線是:1->5->25->125…

第四只青蛙的路線是:1->7->49…

。。。。。。

用數學語言描述,第 只青蛙的路線是首項為1,公比為的等比數列,其中代表第個素數。

當青蛙跳到乙個格仔上,如果這個格仔上面有乙個數,青蛙就會把這個數吃掉。

牛牛想知道,所有沒有被吃掉的數的lcm(最小公倍數 ,least common multiple)是多少?

由於這個lcm可能非常大,請輸出它對取模的值。

輸入描述:

乙個正整數

輸出描述:

如果所有數都被吃掉了,請輸出乙個字串"empty"

否則輸出所有沒有被吃掉的數的lcm,對取模

示例1輸入複製7

輸出複製6說明

數字 1 可以被所有青蛙吃掉;

數字 2 可以被第 1 只青蛙吃掉;

數字 3 可以被第 2 只青蛙吃掉;

數字 4 可以被第 1 只青蛙吃掉;

數字 5 可以被第 3 只青蛙吃掉;

數字 6 無法被吃掉;

數字 7 可以被第 4 只青蛙吃掉。

所以剩下的數字只有乙個 6 ,所有數的 lcm 為 6

示例2輸入

複製123456789

輸出複製

539747460

題意大概就這個意思

所有的素數的k次冪都沒了

然後求剩下的所有數的lcm

對於剩餘的 滿足什麼條件呢 被吃掉的數字全部都是某個素數的k次冪

那麼說明剩下的數字都是兩個以上不同的素數的某個k次冪相乘組成的

又因為每個素數是互質的 那麼求lcm 就只需要求出每個素數出現的最大次數 然後全部相乘就可以了

那怎麼求某個素數出現的最大次數呢 ?

我們知道 至少兩個素數相乘

那麼 當i=2的時候 他出現的最大次數就是log2(n/3) n/3說明 2和3兩個素數組成的 n/3剩下的都是2組成的 然後取log就是2出現的最大次數

對於x。。。。。 出現次數等於logx(n/2) 為什麼n/2呢 這樣是為了保證剩餘的數最大 為了讓x出現的次數更多

又因為至少兩個素數相乘 那麼x最大為n/2 所以曬素數的時候 2~n/2即可

#include

#include

#include

using

namespace std;

typedef

long

long ll;

typedef pair<

int,

int> pii;ll mod=

1e9+7;

intqow_m

(int n,

int w)

return k%mod;

}const

int maxn =

1e6+7;

ll sum=1;

ll n,m,k,wz,cnt=

0,h,ans=0;

ll x,y=0;

int ok[

80000100];

ll s[

10000000];

//int sum[maxn];

void

slu(ll n)}}

intmain()

else}if

(sum==1)

cout<<

"empty"

;else

cout<

return0;

}

一群小朋友在玩老鷹捉小雞

我正奇怪的逛街 今天的我正奇怪的逛街,一群小朋友在玩老鷹捉小雞,在一起就打架,就象橫衝直撞的戰車,爺爺常說,乙個小朋友當老鷹,它的羽毛已經脫落得差不多了,乙個小朋友當母雞,所以爺爺給她起了綽號,呂仕清的三個兵已經過河了。牢牢地守著那位老將,一給叫李杉李杉是二叔家的小寶寶,老虎不是很厲害的逛街嗎,不會...

引用 大局之困 救乙個遵紀小孩還是一群違紀小孩

大局上面仍然有大局,規範也僅在相對環境裡存在,因此,在某種情況下,規範必須向大局妥協 目前,網上流傳著乙個小故事,且不論這個故事是否確有其事,聽起來還是饒有興趣且頗需思量的 有一群小朋友在兩組鐵軌上玩,一組還在使用,一組已經停用。眾多小朋友集中在仍然使用的鐵軌上玩,只有乙個小孩子選擇了停用的鐵軌。很...