日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

水题(water)(非详细解答)

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 水题(water)(非详细解答) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld

題目描述

其中,f(1)=1;f(2)=1;Z皇后的方案數:即在Z×Z的棋盤上放置Z個皇后,使其互不攻擊的方案數。

輸入描述:

輸入數據共一行,兩個正整數x,m,意義如“題目描述”。

輸出描述:

一個正整數k,表示輸出結尾0 的個數或者放置皇后的方案數

示例1
輸入

375 16

輸出

14200

說明

題解:
看了一陣子沒明白,也是從其他人那學完之后,自己總結著再寫
這個題內含三個小題:
1.判斷是否存在k使得f(k)=xf(k)=x
2.n!在m進制下末尾零的個數
3.Z皇后方案數
解答:(非詳細)
1.F函數其實就是斐波那契數列

斐波那契數列平方和的性質:(就是題目中所給公式)

fi[1] = 1, fi[2] = 1;for (int i = 3;; ++i) {fi[i] = fi[i - 1] + fi[i - 2];if (fi[i] > 1e18) break;}

2.求n!在m進制的末尾0個數

首先一個結論:n!的質因子p的個數等于:1~n中p的倍數(n/p)加上(n/p)!中質因子p的個數

然后:
寫出
將數W轉化成m進制的末尾0的個數
的暴力代碼是:

while(W%m==0) {tot++;W/m; }//tot計數

可以得到 W=a * mtot(n是mtot的倍數)

末尾幾個0,tot就是幾(tot是記錄末尾0
的數量)

我們看 n ! 最多可以分解出多少個m
質因數 pi
設m=p1a1 *p2a2 *…*pkak
W = n!
n!= a * m tot
n!=a * (p1a1 *p2a2 *…*pkaktot

n!=a * p1b1 *p2b2 *…*pkbk

bk=ak *tot

求出!x最多可以分解出多少個pi

tot=min(bk/ak)
枚舉k

ll prime[maxn] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};ll getsum(ll n,ll m){ll sum=0;while(n){sum+=n/m;n/=m;}return sum; }//n!的質因子p的個數void ans_solve(){ll ans=1e18+3;M=m;for (int i = 1; prime[i] <= M; ++i) {while (M % prime[i] == 0) {++ans1[prime[i]];M /= prime[i];}}for(int i=1;i<=25;i++){if(ans1[prime[i]]){ans2[prime[i]]=getsum(x,prime[i]);}}for(int i=1;i<=25;i++){if(ans1[prime[i]])ans=min(ans,ans2[prime[i]]/ans1[prime[i]]);}cout<<ans<<endl; }

3.求z皇后方案數
z=x%min(13,m)+1
根據式子就能得到z的范圍在1~13,范圍不大直接打表就可以

ll dabiao() {z[1]=1;z[2]=0;z[3]=0;z[4]=2;z[5]=10;z[6]=4;z[7]=40;z[8]=92;z[9]=352;z[10]=724;z[11]=2680;z[12]=14200;z[13]=73712;} cout<< z[x%min(13*1ll,k)+1];

總結

以上是生活随笔為你收集整理的水题(water)(非详细解答)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。