上班之餘抽點時間出來寫寫博文,希望對新接觸的朋友有幫助。今天在這裡和大家一起學習一下類最大
題意:給定A和B,A和B互質,求最大不能組合數,和不能組合數的個數。
基礎知識:
Gcd(A, B) = 1 → Lcm(A, B) = AB
殘餘類,把所數有整劃分紅m個等價類,個每等價類由互相同餘的數整構成
任何數分紅m個殘餘類,分離為 mk,mk+1,mk+2,……,mk+(m-1)
分離記為{0(mod m)},{1(mod m)}……
而n的倍數定肯布分在這m個殘餘類中
因為Gcd(m,n)=1,所以個每殘餘類中都有一些數是n的倍數,並且是平均分配它的幹證,可見HDOJ 1222 Wolf and Rabbit
設 kmin = min{ k | nk ∈ {i (mod m)} }, i ∈ [0, m)
則 nkmin 是{i (mod m)}中n的最小倍數。特殊的,nm ∈ {0 (mod m)}
nkmin 是個志標,它明表{i (mod m)}中nkmin 面後所數有,即nkmin + jm必定都能被組合出來
那也說明最大不能組合數必定小於nkmin
我們開始尋覓max{ nkmin }
Lcm(m, n) = mn,所以很明顯(m-1)n是最大的
因為(m-1)n是nkmin 中的最大值,所以在剩下的m-1個殘餘類中,必定有比它小並且能被m和n組合,這些數就是(m-1)n -1,(m-1)n -2,……,(m-1)n -(m-1)
所以最大不能被組合數就是(m-1)n -m
如果m和n不互素,那{1 (mod m)}不能被m組合,一樣也不能被n和m組合
我們能求出各個殘餘類的nkmin以後,不能組合數的個數就是個每殘餘類中小於各自nkmin的數的個數總和。
察觀如下:
M = 5,N = 3
{0(mod 5)}:0,5,10,15……
{1(mod 5)}:1,6,11,16……
{2(mod 5)}:2,7,12,17……
{3(mod 5)}:3,8,13,18……
{4(mod 5)}:4,9,14,19……
色紅的就是不能組合數,可以看出在殘餘類中它的數目有律規
Total = [0+1+2] + [0+1]
因為m和n互質,必有一個不完全週期
整頓後以,可得公式 Total = (n-1)*(m-1)/2
生活中受傷難免,失敗跌倒並不可怕,可怕的是因此而一蹶不振,失去了對人生的追求與遠大的理想。沒有一個人的前進道路是平平穩穩的,就算是河中穿梭航行的船隻也難免顛簸,生活中所遇上的坎坷磨難不是偶爾給予的為難,而是必然所經受的磨練。
#include<stdio.h>
int main()
{
int i,j,n,m;
while(scanf("%d%d",&n,&m)!=-1)
{
i=n*m-n-m;
j=(m-1)*(n-1)/2;
printf("%d %d\n",i,j);
}
return 0;
}
文章結束給大家分享下程式設計師的一些笑話語錄: 雅虎最擅長的不是開通新業務,是關閉舊業務。