HDU1005找规律

大佬都说找规律的题目简单,而我这道题做了很久很久…
一开始我是模拟,用到了快速幂和同余定理
然后MLE,。。。。。瞬间脸黑,想想确实是的,自己实验了一下发现确实跑了很久很久。。。。
让我们一起来看一下这个原题吧!
在这里插入图片描述

题目大意:
给你一个函数,然后计算函数值。是不是很憨,是不是很憨?
想用递归是吧?不行呢。MLE了,我好难
那怎么做呢?
于是我就参看了别人的代码发现大佬是这样做的:
根据数学知识我们不难发现,对7求余就会出现重复的情况,同余定理,(af(n-1)+bf(n-2))%7==(a%7f(n-1)+b%7f(n-2))%7;
对于a,b来说,就有7*7=49种情况,也就是49是一个周期,嘤嘤嘤,然后打个表;

代码:

/*
有两种解法:
第一种:矩阵快速幂+二分;
第二种:观察得到规律,是一个周期函数,打表得到答案;

*/
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
	int f[50], a, b, n;
	f[0] = 1, f[1] = 1;
	while (scanf_s("%d%d%d", &a, &b, &n)&&a &&b &&n)
	{
		for (int i = 2; i < 49; i++)
			f[i] = (a * f[i - 1] + b * f[i - 2])%7;
		printf("%d\n", f[(n-1)%49]);
	}
	return 0;
}

至于第一种模拟的解法我还没吃透不敢写555;
大佬可以给我留言教我。
数学杀我我爱数学。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值