トピックリンク https://www.luogu.com.cn/problem/U101928
T1は、その非常に水を見て悲劇的な爆発ゼロqwq、私が間違っていたが判明しました。 それは本当かなり水ですが
ああ、詳細に話題全く見ての最初:
ハムが等しいn個に分割され、Mの部品、mはパラではない 私はここに死ん
第二と第三段落とみなすことができる2 / 3,1 / 3,1 / 3,2 / 3四つの部分、:つまり、あなたは、ハムを2分割されて置くことができます!
問題の解決策
ケースであることを、我々は単に大きな根は良いとしてハムn個の根を置きます。
我々は、各ハムの長さが1であると仮定した場合の長さは、nルートハムです。
我々はmで等分に分割する、それはすべてのN / Mの長さです。
一部をカットするために私たちのマルチナイフを考えると、私たちは、M-1のナイフまでカットする必要があります。
また、一つの場所に注意を払う必要があります。
いくつかのハムナイフでこのM-1のナイフは、私たち人間は、それの作品ですが、私たちはそれをカットするナイフを取ったのと同様に、おそらくこの場所が壊れていたインターフェイスです。
我々はそれを見つける必要があるので、再びM-1にナイフの数をちょうどハムの界面で二つに切りナイフで、マイナスとM-1が最後の答えです。
ハムの二つのインターフェースにknifed考えられるAがあるので、次にN / Mの分割された前部セクション長の数は、いくつかのサブルートで構成することができると共に、完全なハムを置きます。
このインターフェース必須大会であることハム(1)のそれぞれの長さと複数の長さのそれぞれ(N / M)倍で、正の整数でした。
ルートを完了するためにハムカットの前の数によっていくつかの部分ので、同時に複数の整数タリアを保証しなければなりません。
その後、我々は、(1、N / M)請求LCM中で開始します。
设K = LCM(1、N / M)= LCM(M、N)/ M = M * N / GCD(N、M) / M = N / GCD(N、M)
ハム次に、長さN有するN / K = N / (N / GCD(N、M)) 倍= GCD(N、M)K-、要件を満たすために非常に多くのインタフェースがあり、すなわち、
私たちは実際には、あなたはマイナス1に必要、必要とされていない、最終カットカウントする(長さnはその大きなハム最後にナイフカット)を入れたのでしかし、nの倍数にはkは、次のとおりです。
GCD(N、M) - 1
最後に、我々はその後、M-1を引き、最終的な答えは次のようになります。
ANS =(M - 1) - (GCD(N、M) - 1)= M - GCD(N、M) 。
その後、我々の直接出力メートル - GCD(n、m)とすれば完了です!
コード:
書式#include <iostreamの> の#include <cstdioを> 使用して 名前空間はstdを、 INT T、N、M。 INT GCD(INT A、int型B) { 場合(B == 0)を返します。 戻り GCD(B、%のB)。 } int型のmain() { scanf関数(" %のD "、&T)。 一方、(T-- ) { scanf関数(" %D%D "、&N、&M)。 printf(" %dの\ nは"、M- GCD(N、M))。 } }