1. 程式人生 > >【題解】BZOJ 2721 [Violet 5]櫻花

【題解】BZOJ 2721 [Violet 5]櫻花

傳送門

Description

求出有多少對 (x,y) 滿足

1x+1y=1n!

Solution

首先是對公式進行變形

1x+1y=1n!xn!+yn!=xyxyxn!yn!+(n!)2=(n!)2(xn!)(yn!)=(n!)2
接下來我們令 p=xn!q=yn! 。就變成了 pq=(n!)2

這下問題就轉化成求

(n!)2 有多少個約數。

我們寫出 n! 的唯一分解式:

n!=p1α1p2α2pkαk

(n!)2=p12α1p22α2pk2αk

那麼 (n!)2 的約數個數等於

(2α1+1)(2α2+1)(2αk+1)
直接計算即可。

Code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 10000000 #define P 1000000007 int prime[N], number[N], f[N]; int main() { int n; int cnt = 0; scanf("%d", &n); for (int i = 2; i <= n; i++) { // 線性篩 if (f[i] == 0) { cnt++; prime[cnt] = i; f[i] = cnt; } for (int j = 1; j <= cnt; j++){ if
(prime[j] * i > n) break; f[prime[j] * i] = j; if (i % prime[j] == 0) break; } } for (int i = 2; i <= n; i++) { int x = i; while (x != 1) { // 分解 i int j = prime[f[x]]; while (x % j == 0) { number[f[x]]++; x /= j; } } } long long sum = 1; for (int i = 1; i <= cnt; i++) // 計算結果 if (number[i] != 0) (sum *= (2ll * number[i] + 1ll)) %= P; printf("%lld\n", sum); return 0; }

相關推薦

題解BZOJ 2721 [Violet 5]櫻花

傳送門 DescriptionDescription 求出有多少對 (x,y)(x,y) 滿足 1x+1y=1n!1x+1y=1n! SolutionSolution 首先是對公式進行

bzoj 2721[Violet 5]櫻花 數論

wid problems str long 就是 mem content put etc [Violet 5]櫻花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 671 Solved: 395[Submit][Stat

BZOJ 2721: [Violet 5]櫻花

(X-N)(Y-N)=N^2 #include<cstdio> using namespace std; const int mod=1e9+7; int n,cnt,isprime[1000005],prime[1000005]; void Pre_prime(){ for

題解BZOJ 2005 [Noi2010]能量採集

傳送門 DescriptionDescription 根據題目描述以及最基礎的找規律(真的很基礎),答案就是 ∑i=1n∑j=1m(2gcd(i,j)−1)=2∑i=1n∑j=1mgcd(i,j)

題解BZOJ 4458 GTY的OJ

傳送門 DescriptionDescription 給定一棵 nn 個結點的樹,每個結點有一個點權 aiai。選出 mm 條不重複的路徑,滿足路徑上的結點數在 [l,r][l,r] 範圍內。求點權和的最大值。 SolutionSolution 這道

bzoj2721[Violet 5]櫻花

n! tmp 代碼 include 什麽 TP ctime col style   題目傳送門:https://www.lydsy.com/JudgeOnline/problem.php?id=2721   好久沒做數學題了,感覺有些思想僵化,走火入魔了。   這道題就

BZOJP2724Violet 6蒲公英題解分塊

區間眾數,分塊亂搞,維護每個塊之間答案,詢問sqrt(n)logn Code: #include<cstdio> #include<cmath> #include<vector> #include<map> #include

BZOJP2073POI2004PRZ題解狀壓DP+列舉子集

狀壓DP+列舉子集 Code: #include<bits/stdc++.h> using namespace std; int n,W; int w[18],t[18]; int dp

BZOJP2212&P3702Poi2011Tree Rotations二叉樹題解啟發式合併

啟發式合併不解釋 Code: #include<bits/stdc++.h> using namespace std; const int maxn=4e5+5; struct node{ int val,key,size,s; nod

BZOJP2530Poi2011Party題解水題

最近兩天頹的厲害啊唉…… ==============分割線==================== 讓在團裡的和不在團裡的兩兩抵消,剩下的就是 Code: #include<bits/std

BZOJP3505CQOI2014數三角形題解組合數

C(nm,3)-共線 直線共線 C(n,3)*m+C(m,3)*n 列舉斜著的矩陣, 矩陣上有gcd(i,j)-1個點,有(n-i)*(m-j)個矩陣,反方向*2 完了 Code: #include

BZOJP1468Tree題解點分治

剛學點分治,簡要的記錄一下 每次選擇一個點把這棵樹分成幾個不相交的子樹 挑一個使得最大子樹size最小的點 計算過這個點的答案 遞迴處理這幾個子樹 Code: #include<cstdio&

BZOJP3265志願者招募加強版題解單純形法

讀了一天算導,成功yy出單純形~~ Code: #include<bits/stdc++.h> using namespace std; const int maxn=10010; co

BZOJP3534Sdoi2014重建題解矩陣樹定理

dt學了矩陣樹定理 鄰接矩陣中的的權可以不是1,而是其他權值,比如概率 這樣計算出來的就是所有生成樹的概率和,即 但是這樣不對…… 生成一顆生成樹T的概率應該是 接著就是神奇的轉換 設G要求的矩陣,P是給出的矩陣 我們令 對G計算n-1階主子式,即有 那麼把它

題解洛谷P1217[USACO1.5]迴文質數 列舉

題目連結 #include <bits/stdc++.h> using namespace std; long long sushu(long long x,long long y){ int i,i1,i2,i3,i4,flag=0;

MYSQL-CLUSTER-7.5搭建數據庫集群

安裝教程 讀寫 固定 現在 note res 順序 遠程訪問 關閉 閱讀目錄 前言 mysql cluster中的幾個概念解釋 架構圖及說明 下載mysql cluster 安裝mysql cluster之前 安裝配置管理節點 安裝配置數據和mysql節點

題解coin HDU2884 多重背包

max-width urn msd 多重背包 cbo time lee tmg sin 題目 Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

題解逐個擊破 luogu2700

white cdt ldl 離開 ros print .aspx -h ftw 題目 題目描述: 現在有N個城市,其中K個被敵方軍團占領了,N個城市間有N-1條公路相連,破壞其中某條公路的代價是已知的。 現在,告訴你K個敵方軍團所在的城市,以及所有公路破壞的代價,

題解SHOI2001化工廠裝箱員

span 暴力 bits a + b return 很多 problem min efi ————傳送:洛谷P2530 這道題目還是挺簡單的,狀態也容易想到。 數據範圍非常的小,所以即便是很多維度,復雜度也完全可以接受。定義狀態:dp[i][a][b][c]為手上的貨物拿到

題解ZJOI2008騎士

urn 十分 cnp gree arch 沒有 mark target true 樹型打牌:洛谷P2607 這道題目一開始沒有想到解法,只是想到沒有上司的舞會,覺得十分的類似呀。 之後發現:n個點,n條邊,只要刪去一條邊,就變成了和上題一模一樣的做法。 那麽考慮刪去的這條邊