HDU 1098 Ignatius's puzzle

本文探讨了一种数学问题解决方法,通过分析等式f(x+1)=f(x)+5*((13 1)x^12+...+(13 13)x^0)+13*((5 1)x^4+...+(5 5)x^0)+k*a,并利用同余方程ax+by=c的解的存在条件,最终求解出使18+k*a能被65整除的最小正整数解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

65|f(x) 表示是f(x)能被65整除。

思路:
则f(x+1 ) = f (x) +  5*( (13  1 ) x^12 ...... .....+(13  13) x^0  )+  13*(  (5  1 )x^4+...........+ ( 5  5  )x^0  )+k*a;

很容易证明,除了5*(13  13) x^0 、13*( 5  5  )x^0 和k*a三项以外,其余各项都能被65整除. 且 f(1)=18+k*a
那么也只要求出18+k*a能被65整除就可以了.

由 18+ka=n*65 得 k*a+65*n = 18 (n,a ∈ N*)

ax+by = c 方程有解的一个充要条件是:c % gcd(a, b) == 0。

然后枚举直到65*n-18%k == 0为止。

#include <cstdio>

int gcd(int n, int m)
{
	while (m) {
		int t = m;
		m = n % m;
		n = t;
	}
	return n;
}

bool exans(int c, int a, int b)
{
	return c % gcd(a, b) == 0;
}

int main()
{
	int k;
	while (scanf("%d", &k) != EOF) {
		if (!exans(18, 65, k))
			puts("no");
		else {
			int i = 1;
			while ((65 * i - 18) % k)
				++i;
			printf("%d\n", (65 * i - 18) / k);
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值