8.18 B组 T1 分火腿

题目大意:

把n条火腿均分成m份,求最少刀数

解题思路:

可以把n根火腿肠连起来,那么最多需要切m-1刀,如果切的地方恰好是火腿的连接处,那么就少切一刀
即n是m的倍数时少切一刀
所以答案是(m-gcd(n,m))

A c c e p t e d   c o d e : Accepted\ code: Accepted code:

#include
#include

using namespace std;

int t, n, m;

int gcd(int x, int y) {
      return y == 0 ? x : gcd(y, x % y); }

int main() {
     
	scanf("%d", &t);
	while (t--) {
     
		scanf("%d %d", &n, &m);
		printf("%d\n", m - gcd(n, m));
	}
} 

你可能感兴趣的:(数论)