水题
/**************************************************** * author:crazy_石头 * Pro:Jobdu * algorithm:快速幂 * Time:32ms * Judge Status:Accepted *******************************************************/ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <vector> #include <algorithm> #include <cmath> using namespace std; #define rep(i,h,n) for(int i=(h);i<=(n);i++) #define ms(a,b) memset((a),(b),sizeof(a)) #define eps 1e-8 #define INF 1<<29 #define LL __int64 const int maxn=100000+5; const int mod=200907; inline LL quick_mod(LL a,LL n) { LL ret=1; while(n) { if(n&1)ret=ret*a%mod; n>>=1; a=a*a%mod; } return ret; } int main() { int test; scanf("%d",&test); while(test--) { LL a,b,c,k; LL d,q; LL ans; scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k); if(a+c==2*b)//等差数列;写出通项; { d=b-a;//计算公差; ans=((k-1)%mod*(d%mod)+a%mod)%mod; printf("%I64d\n",ans); } else //等比数列,用通项求; { q=b/a; ans=((a%mod)*quick_mod(q,k-1))%mod; printf("%I64d\n",ans); } } return 0; }
水题。
/**************************************************** * author:crazy_石头 * Pro:Jobdu * algorithm:Euler 函数 * Time:32ms * Judge Status:Accepted *******************************************************/ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <vector> #include <algorithm> #include <cmath> using namespace std; #define rep(i,h,n) for(int i=(h);i<=(n);i++) #define ms(a,b) memset((a),(b),sizeof(a)) #define eps 1e-8 #define INF 1<<29 #define LL __int64 const int maxn=3000000+5; int a[maxn]; bool used[maxn]; inline void Euler() //欧拉打表。 { int i,j; for(i=2;i<=maxn;i++)a[i]=i; a[1]=0; for(i=2;i<=maxn;i++) if(used[i]==false) { for(j=i;j<=maxn;j+=i) { a[j]=a[j]/i*(i-1); used[j]=true; } } } int main() { int n,m,i; LL ret; Euler(); while(scanf("%d%d",&n,&m)==2) { ret=0; rep(i,n,m)ret+=a[i]; printf("%I64d\n",ret); } return 0; }