05 2013 档案
摘要:这题用扩展的欧几里得算法#include<iostream>using namespace std;void gcd(int a,int b,int &x,int &y){ if(b==0) { x=1;y=0; } else { gcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; }}int main(){ int T,x,y; int n,m; cin>>T; while(T--) { scanf("%d%d",&n,&m); gcd(m,9973,x,y); x*=n; printf
阅读全文
摘要:这题就是找规律,结果=奇数的平方数+偶数-偶数的平方数,再就是注意1-4全是0……#include <iostream>#include <cmath>using namespace std;__int64 fun(__int64 n){ __int64 sum=0,num; if(n<5) return 0; sum=n/2; num=(__int64)sqrt(n*1.0); sum+=num%2; sum-=2; return sum;}int main(){ __int64 n,m; int t; cin>>t; while(t--) { sc
阅读全文
摘要:水题,注意一点就是前20位不能用公式,后面才可以用……#include <iostream>#include <cmath>using namespace std;int ans[22]={0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765};int fun(long n){ double a; int b; a=-0.5*log10(5.0)+n*log10((sqrt(5.0)+1)/2); b=pow(10.0,a-(int)a+3); return b;}int main(){
阅读全文
摘要:通过不断的寻找2^a*3^b*5^c*7^d按顺序的数就可以了……#include <iostream>#include <cmath>using namespace std;__int64 ans[6000];int find(int a,int b,int c,int d){ int aa=a>b?b:a; int bb=c>d?d:c; return aa>bb?bb:aa;} void init(){ int a,b,c,d,min,a1,b1,c1,d1; a=b=c=d=0; ans[0]=1; for(int i=1;i<=5842
阅读全文
摘要:快速求出欧拉函数值……注意数据类型,否则会超时的#include<iostream>using namespace std;const long MMAX=3000000;__int64 Euler[MMAX];void Get_Euler(){ int i,j; for(i=1;i<MMAX;i++) Euler[i]=i; for(i=2;i<MMAX;i++) { if(Euler[i]==i) { for(j=i;j<MMAX;j+=i) Euler[j]=Euler[j]/i*(i-1); } }}int main(){ Get_Euler(); int
阅读全文
摘要:简单的欧拉函数……#include<iostream>using namespace std;typedef __int64 int64;//const long mod=1000000007;int64 fun(int64 n){ int64 ans=1; for(int i=2;i*i<=n;i++) { if(n%i==0) { n/=i; ans=ans*(i-1); while(n%i==0) { n/=i; ans=ans*i; } } } if(n>1) ans*=n-1; return ans;}int main(){ int64 n,...
阅读全文
摘要:刚开始不知道怎么做,看了大神的做法后,才知道要用到欧拉函数……#include<iostream>using namespace std;const int N=1000010;__int64 euler[N];void get_euler(){ int i,j; for(i=1;i<N;i++) euler[i]=i; for(i=2;i<N;i++) if(euler[i]==i) for(j=i;j<N;j+=i) euler[j]-=euler[j]/i;}void Init(){ get_euler(); for(int i=2;i<N;i++)
阅读全文
摘要:水题不解释……#include<iostream>using namespace std;int fun(int a){ int s,n,m=abs(a); s=m%10;m=m/10; while(m) { n=m%10; m=m/10; s=s*10+n; } if(a<0) return -s; return s;}int main(){ int t,i,j,x,y,a,b; scanf("%d",&t); while(t--) { scanf("%d%d",&x,&y); a=(x+y)/2;b=(x-y
阅读全文
摘要:刚开始,一直LE,后来优化了下Accepted29713265MS232K1105 BC++#include<iostream>using namespace std;typedef __int64 int64;int64 x,y,a2,n,mod;struct matrix{ int64 a[4][4];}e,p;matrix mul(matrix m,matrix n){ matrix ans; for(int i=0;i<4;i++) for(int j=0;j<4;j++) { ans.a[i][j]=0; for(int k=0;k<4;k++) { i
阅读全文
摘要:这题属于矩阵构造,有a(n)=x*a(n-1)+y*a(n-2);s(n)=s(n-1)+a(n)^2;联立可得到相关矩阵,再用矩阵2分快速幂就可得到结果了……#include<iostream>#include<stdio.h>using namespace std;typedef __int64 int64;long x,y,n;const int mod=10007;struct matrix{ int64 a[4][4];};matrix e;matrix mul(matrix m,matrix n){ matrix ans; for(int i=0;i<
阅读全文
摘要:这个挺不错的,要考虑的问题很多,首先是矩阵2分快速幂,再就是矩阵的求和。在矩阵的求和中要用到快速2分,采用递归来求……#include<iostream>#include<stdio.h>using namespace std;typedef __int64 int64;long k,b,n,mod;struct matrix{ int64 a[2][2]; void init() { a[0][0]=a[0][1]=a[1][0]=1; a[1][1]=0; } void e() { a[0][0]=a[1][1]=1; a[0][1]=a[1][0]=0; }};m
阅读全文
摘要:这题很容易就可以推出f(n)的公式。这个用到了矩阵和整数的快速2分幂,还需注意一点就是pow(n,m)=pow(n,m mod 1000000006);千万注意别写成mod 1000000007 ,否者会一直WA的。#include<iostream>#include<stdio.h>using namespace std;typedef __int64 in;struct aa{ in a[2][2]; void init() { a[0][0]=a[0][1]=a[1][0]=1; a[1][1]=0; }};aa mul(aa m,aa n){ aa ans; f
阅读全文
摘要:矩阵快速幂的水题#include<iostream>#include<stdio.h>#include<cmath>#include<iomanip>using namespace std;struct aa{ int a[11][11];};int mod;aa f(aa m,aa n){ aa ans; for(int i=0;i<10;i++) for(int j=0;j<10;j++) { ans.a[i][j]=0; for(int k=0;k<10;k++) ans.a[i][j]+=m.a[i][k]*n.a[k]
阅读全文
摘要:这个也是矩阵2分快速幂但是重点是找出规律来就好做了即:f(n)=f(n-1)+f(n-3)+f(n-4)#include<iostream>#include<stdio.h>#include<cmath>using namespace std;struct aa{ int a[4][4]; void init() { a[0][0]=a[0][2]=a[0][3]=a[1][0]=a[2][1]=a[3][2]=1; a[0][1]=a[1][1]=a[1][2]=a[1][3]=a[2][0]=a[2][2]=a[2][3]=a[3][0]=a[3][1]
阅读全文
摘要:这个主要是矩阵2分快速幂#include#include#includeusing namespace std;struct aa{ int a[11][11];};aa f(aa m,aa n,int nn){ aa ans; for(int i=0;i>=1; m=f(m,m,n); } sum=0; for(i=0;i<n;i++) sum+=ans.a[i][i]; return sum%9973;}int main(){ long m; int t,n,i,j; scanf("%d",&t); while(t--) { aa p; scanf(
阅读全文
摘要:刚学习矩阵快速幂对于这题求后4位是使用矩阵快速幂进行;而对于前4位,用到公式求得,具体看代码:#include#include#includeusing namespace std;long a[2][2]={{1,1},{1,0}},b[2]={0,0};struct aa{ long a[2][2]; void init() { a[0][0]=a[0][1]=a[1][0]=1; a[1][1]=0; }};aa f(aa m,aa n,long mod){ aa ans; for(int i=0;i>=1; m=f(m,m,mod); } return ans;}int main
阅读全文
摘要:这题是很水的题……#include <iostream>#include <stdio.h>using namespace std;int fun(int m,int n){ int a; if(m<n) { a=m; m=n; n=a; } while(m%n!=0) { a=m%n; m=n; n=a; } return n;}int main(){ int x,y,z,t,i,j,m,d,flag,k; int mm[13]; scanf("%d",&t); for(k=1;k<=t;k++) { mm[1]=mm[3]=m
阅读全文

浙公网安备 33010602011771号