摘要: 这题就是找规律,结果=奇数的平方数+偶数-偶数的平方数,再就是注意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 阅读全文
posted @ 2013-05-23 13:40 _随心所欲_ 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 水题,注意一点就是前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(){ 阅读全文
posted @ 2013-05-23 10:39 _随心所欲_ 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 通过不断的寻找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 阅读全文
posted @ 2013-05-22 21:08 _随心所欲_ 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 快速求出欧拉函数值……注意数据类型,否则会超时的#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 阅读全文
posted @ 2013-05-22 15:04 _随心所欲_ 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 简单的欧拉函数……#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,... 阅读全文
posted @ 2013-05-22 08:44 _随心所欲_ 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 刚开始不知道怎么做,看了大神的做法后,才知道要用到欧拉函数……#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++) 阅读全文
posted @ 2013-05-21 17:15 _随心所欲_ 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 水题不解释……#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 阅读全文
posted @ 2013-05-21 14:56 _随心所欲_ 阅读(155) 评论(2) 推荐(0) 编辑
摘要: 刚开始,一直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 阅读全文
posted @ 2013-05-21 09:35 _随心所欲_ 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 这题属于矩阵构造,有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< 阅读全文
posted @ 2013-05-20 21:22 _随心所欲_ 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 这个挺不错的,要考虑的问题很多,首先是矩阵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 阅读全文
posted @ 2013-05-20 20:04 _随心所欲_ 阅读(188) 评论(0) 推荐(0) 编辑