zoj 3547
来源:互联网 发布:百鸡问题的最简单算法 编辑:程序博客网 时间:2024/05/22 03:07
这题没啥好说的,就是1^4+2^4+3^4+...+n^4 这个公式找出来就行了,接下来就是容斥原理进行计算,hdu 4488 已经告诉我们怎么去递推系数了
zoj 3547
#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<queue>#include<iostream>#include<bitset>using namespace std;typedef long long ll;const int maxn = 10011111;const int N = 100001;const int mod = 1000000007;int p[N],size;bitset<100000>a;void init(){int i,j;a[0]=a[1]=1;for(i=2;i*i<=12000;++i){if(!a[i]){for(j=i*i;j<=12000;j+=i){a[j]=1;}}}for(i=2;i<=12000;++i){if(!a[i])p[size++]=i;}}int cnt,tsize;int c[1111];int f[1111];int d[1111];void dfs(int x,int k){if(x==tsize){d[cnt++]=k;return;}for(int i=0;i<=c[x];k*=f[x],++i){dfs(x+1,k);}}void spilt(int n){int i,t=n;cnt=tsize=0;memset(c,0,sizeof(c));for(i=0;1ll*p[i]*p[i]<=t&&i<size;++i){if(t%p[i]==0){f[tsize]=p[i];while(t%p[i]==0)c[tsize]++,t/=p[i];tsize++;}}if(t>1){f[tsize]=t;c[tsize]++;tsize++;}//dfs(0,1);}ll cal(ll a,int b){ll res=1,t=a;while(b){if(b&1) res=res*t%mod;t=t*t%mod;b>>=1;}return res;}ll go(ll n){ll ans=6ll*cal(n,5)+15ll*cal(n,4)+10ll*cal(n,3)-n;ans=ans*cal(30ll,mod-2)%mod;return ans;}ll ans;void gao(int x,int cnt,int mul,ll n){if(x<0){ll t=go(n/mul)*cal(mul,4)%mod;if(cnt&1)ans-=t;elseans+=t;return ;}else{gao(x-1,cnt,mul,n);gao(x-1,cnt+1,mul*f[x],n);}}int main(){init();int T,n;scanf("%d",&T);while(T--){scanf("%d",&n);spilt(n);ans=0;gao(tsize-1,0,1,n);ans=(ans%mod+mod)%mod;printf("%lld\n",ans);}return 0;}
import java.io.*;import java.util.*;import java.text.*;import java.math.*;public class Main { public static void main(String args[]) { new A().main(); }}class A { Scanner cin = new Scanner(new BufferedInputStream(System.in)); PrintStream cout = System.out; class fraction { BigInteger a, b; // public static fraction public fraction(BigInteger a, BigInteger b) { this.a = a; this.b = b; } fraction multiply(fraction t) { BigInteger m = t.a, n = t.b, p, q; p = m.multiply(a); q = n.multiply(b); m = p.gcd(q); p = p.divide(m); q = q.divide(m); return new fraction(p, q); } fraction add(fraction t) { BigInteger m = t.a, n = t.b, p, q; p = m.multiply(b); p = p.add(n.multiply(a)); q = n.multiply(b); m = p.gcd(q); p = p.divide(m); q = q.divide(m); return new fraction(p, q); } fraction substract(fraction t) { BigInteger m = t.a, n = t.b, p, q; p = a.multiply(n); p = p.subtract(m.multiply(b)); q = n.multiply(b); m = p.gcd(q); p = p.divide(m); q = q.divide(m); return new fraction(p, q); } } fraction[][] f = new fraction[402][402]; BigInteger one = BigInteger.ONE; BigInteger zero = BigInteger.ZERO; BigInteger two = BigInteger.valueOf(2); void main() { int i, j; for (i = 0; i <= 400; i++) for (j = 0; j < i; j++) f[i][j] = new fraction(zero, one); for (i = 0; i <= 400; ++i) { f[i][i + 1] = new fraction(one, BigInteger.valueOf(i + 1)); f[i][i] = new fraction(one, two); f[i][0] = new fraction(one, zero); }/* * BigInteger a,b,c,d; a=cin.nextBigInteger(); b=cin.nextBigInteger(); * c=cin.nextBigInteger(); d=cin.nextBigInteger(); fraction p=new * fraction(a,b); fraction q=new fraction(c,d); fraction * res=p.substract(q); cout.println(res.a+" "+res.b); */ fraction fone = new fraction(one, one); for (i = 2; i <= 400; ++i) { fraction tmp = new fraction(one, one); for (j = 2; j < i; ++j) { // cout.println(j+" "+i); f[i][j] = f[i - 1][j - 1].multiply(new fraction(BigInteger .valueOf(i), BigInteger.valueOf(j))); tmp = tmp.substract(f[i][j]); } tmp = tmp.substract(f[i][i]); tmp = tmp.substract(f[i][i + 1]); f[i][1] = tmp; } int n, m; int T, p; T=cin.nextInt(); for (int ca = 0; ca < T; ++ca) { p = cin.nextInt(); n = cin.nextInt(); m = cin.nextInt(); cout.print(p + " " + f[n][m].a); if (f[n][m].b.compareTo(one) > 0) cout.print("/" + f[n][m].b); cout.println(""); } }}
- zoj 3547
- ZOJ 3547 & HDU 4059
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- 矩阵快速幂 Fibonacci 3070 poj
- lock
- 工作笔记
- ORA-00214 控制文件版本不一致恢复过程
- 改变UITabBarController的颜色
- zoj 3547
- hdu 3422 Triangle - 本原勾股数组 (st,(s^2-t^2)/2,(s^2+t^2)/2)
- 配置
- 在树莓派上安装java
- 完数
- win7(32bit)下安装mongodb
- js,java小数计算精度问题
- linux命令之wc
- centos中wget的使用方法