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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

fzu - 2164 Jason's problem

發布時間:2025/3/16 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fzu - 2164 Jason's problem 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:就是把n的階乘轉化b進制后綴為0的個數為k,求b的個數(n/k < 500)

題解:把n的階乘分解素因子,枚舉前500個素因子即可,找出素因子的個數大于k的

然后就是求符合條件的素因子的組合有多少種;

#include<stdio.h> #include<math.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; typedef __int64 LL; const LL mod = 1000000007; LL prime[1000]; LL vis[10005]; LL a[1000]; LL b[1000]; LL num; void init() {num = 0;memset(vis,0,sizeof(vis));for(LL i = 2; i <= 6000; i++){if(!vis[i]){prime[num++] = i;for(LL j = i+i; j <= 6000; j+=i){vis[j] = 1;}}}} int main() {init();int T;LL n,k,tmp;scanf("%d",&T);while(T--){scanf("%I64d%I64d",&n,&k);LL p = 0,i;LL ans = 1,ans1 = 1,Sum = 0; ;for(i = 0; i < num; i ++){tmp = n;LL sum = 0;while(tmp){tmp/=prime[i];sum += tmp;}if(sum >= k){LL ss = sum/k+1;ans = (ans * ss)%mod;a[i] = ss - 1;b[i] = sum;}else break;}for(LL j = 0; j < i; j++){LL count = 0;for(LL r = 1; r <= a[j]; r++)if(b[j]/r!=k) count++;ans1 = (ans1 * (count+1))%mod;}printf("%I64d\n",((ans-ans1)%mod+mod)%mod);} }

總結

以上是生活随笔為你收集整理的fzu - 2164 Jason's problem的全部內容,希望文章能夠幫你解決所遇到的問題。

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