Hdu 4599
来源:互联网 发布:计划任务软件 编辑:程序博客网 时间:2024/05/18 18:18
题目
对于 F(N)=1+6*F(N-1) => F(N)+1/5=6(F(N-1)+1/5); => F(1)=1 => F(N) = (6^N)/5-1/5;
对于 H(N)=6*F(N);
对于 G(N)=6*N;
我也不知道这样为什么是正确,好像正规的推导是倒着来, F(N)=1/6 *(1+ F(N+1))+5 / 6 *(1+F(1)),F(N)=0 //(有1/6的可能一样,剩余的5/6将回归到F(1));
也就是我们要求 6*m1>= (6^N)/5-1/5,6*m2>=6*( (6^N)/5-1/5);
用逆元.
(摘自:http://hi.baidu.com/zhanggmcn/item/ef4dadceb4fb993e449416e7)
对于(a/b)%mod,如果b为a的因数,那么对于b的逆元c(b*c%mod==1)
有(a/b*1)%mod=(a/b*b*c)%mod=(a*c)%mod;
所以可以求出b的乘法逆元.
方一: 扩展欧几里得:bx+mod*y=1解出的x就是b的乘法逆元
方二:如果mod是素数,那么b的逆元为 b^(mod-2)%mod;
首先对于m2>=(6^n-1)/5,显然6^n的各位是6,减去1后,能被5整除,加上mod2011是素数,所以可以直接做.
对于m1>=(6^n-1)/30,为了整除,且m1最小,m1=(6^+24)/30;
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;#define mod 2011typedef long long ll;inline ll Pow(ll a,ll n){ll ans=1,t=a;while(n){if(n%2) ans=ans*t%mod;n/=2;t=t*t%mod;}return ans;}ll n;int main(){while(~scanf("%I64d",&n)){ll m1,m2;ll ny=Pow(5,mod-2);m2=(Pow(6,n)-1+mod)%mod*ny%mod;ny=Pow(30,mod-2);m1=(Pow(6,n)+24)%mod*ny%mod;printf("%I64d %I64d\n",m1%mod,m2%mod);}//system("pause");return 0;}
- Hdu 4599
- hdu 4599 Dice
- hdu 4599 Dice
- HDU 4599 Dice
- HDU 4599 Dice
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- HDU 2686 双进程DP
- 类的加载和反射
- pjsip 编译配置项
- Flex 1114 The public attribute can only be used inside a package.
- 新的起点
- Hdu 4599
- struts2文件上传(一)
- [转贴]【sqlldr】 “Field in data file exceeds maximum length ”解决办法
- 在linux下如何找出最大的文件并排序
- iOS手势操作
- 基于C#的A_star寻径算法的实现
- VC多个MRU菜单的问题
- C++学习cin.fail()之后无限循环错误说明
- Struts2 中 OGNL 如何更简单的访问静态变量和静态方法