URAL 1309 Dispute (数学+推导)
来源:互联网 发布:淘宝投诉假冒伪劣 编辑:程序博客网 时间:2024/05/21 18:50
题目链接: http://acm.timus.ru/problem.aspx?space=1&num=1309
题意:f(0) = 0, f(n) = g(n, f(n-1)), g(x,y) = ((y-1)x5 + x3 – xy + 3x + 7y) % 9973
输入n(n<100000000),输出 f(n) 。
思路: f[n] = f[n-1] *(n^5 - n + 7 ) + n^3 - n^5+3*n.
令k[n] = n^5 - n + 7 , t[n] = n^3 - n^5+3*n 。即 f[n] = k[n] * f[n-1] + t[n] ;
将上式展开可得 f[n] = ( t[1]*k[2]*....*k[n] ) + ( t[2]*k[3]*....*k[n] ) +...+ t[n-1]*k[n] + t[n].
p=n/mod , q=n%mod tmp=k[0]*k[1]*...*k[mod-1]
f[n] = ( t[mod*0+1]*k[mod*0+2]*....*k[n] ) +...+ ( t[mod*1] k[mod*1+1]*...* k[n] ) (1)
+( t[mod*1+1]*k[mod*1+2]*....*k[n] ) +...+ ( t[mod*2] k[mod*2+1]*...* k[n] ) (2)
..
+( t[mod*(p-1)+1]*k[mod*(p-1)+2]*....*k[n] ) +...+ ( t[mod*p] k[mod*p+1]*...* k[n] ) (p)
+( t[mod*p+1]*k[mod*p+2]*....*k[n] ) +...+ t[n])
在上式中可看出 式(1) = 式(2) * tmp ;
所以 f[n] = 式(p)*(1+ tmp + ...+ tmp^(p-1)) +( t[mod*p+1]*k[mod*p+2]*....*k[n] ) +...+ t[n]).
因为其余部分和式(p) 可以暴力求出。即 可以求出f[n]了。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int mod=9973;const int maxn=mod*10;int k[mod+15],t[mod+15],a[mod+5],n;int mul(int num,int ct){ int ret=1; num%=mod; for(int i=1;i<=ct;i++) ret=ret*num%mod; return ret;}int main(){ k[0]=7; t[0]=0; for(int i=1;i<mod+3;i++) { k[i]=((7+mul(i,5))%mod-i+mod)%mod; t[i]=((mul(i,3)-mul(i,5)+mod)%mod+3*i)%mod; } int tmp=k[0],sum=0; for(int i=mod-1;i>=1;i--) { a[i]=tmp*t[i]%mod; sum=(sum+a[i])%mod; tmp=tmp*k[i]%mod; } while(scanf("%d",&n)!=EOF) { int p=n%mod,q=n/mod; int now=1,ans=0; for(int i=p;i>=1;i--) { ans=(ans+now*t[i]%mod)%mod; now=now*k[i]%mod; } int tp=sum*now%mod; for(int i=1;i<=q;i++) { ans=(ans+tp)%mod; tp=tmp*tp%mod; } cout<<ans<<endl; } return 0;}
- URAL 1309 Dispute (数学+推导)
- URAL 1309: Dispute
- URAL 1309 Dispute
- Ural 1309 Dispute (递推)
- URAL 1309 Dispute <函数关系的递推>
- Ural 1082|Gaby Ivanushka|数学推导|快速排序|程序分析
- POJ 2601|URAL 1047|Simple Caluculations|数学推导
- URAL 1113(数学)
- URAL 1515. Cashmaster (数学啊 )
- URAL 1885. Passenger Comfort(数学啊 )
- URAL 1889. Airport Announcements(数学啊 )
- URAL 1718 . Rejudge(数学啊 )
- URAL 1711. Code Names (数学啊 )
- URAL 1984. Dummy Guy(数学啊)
- URAL 1725. Sold Out!(数学啊 )
- URAL 1731. Dill(数学啊 )
- URAL 1823. Ideal Gas(数学啊 )
- URAL 1826. Minefield(数学 递归)
- linux命令行模式下配置wifi热点
- 提高java编程性能的好习惯
- QT之QFileSystemWatcher使用
- bat for循环
- POJ3181 完全背包+高精度数模板
- URAL 1309 Dispute (数学+推导)
- php错误记录
- java日志组件介绍(JUL,common-logging,log4j,slf4j,logback )
- Android开发中的多线程
- LeetCode 98: Validate Binary Search Tree
- egret(白鹭引擎) 学习历程(二)
- java应用程序利用Exe4j打包成exe文件
- HDU2049
- Java 多线程 并发编程