题意:求出11+22+33+...+10001000的后10位。
思路:对1010取模就可以了,注意用快速幂可能会越界。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn=1e7; int v[maxn]; struct Prime { int prime[maxn]; int s; Prime() { for(int i=2; i<maxn; i++) { if(!v[i]) { prime[s++]=i; for(int j=2; j*i<maxn; j++) v[i*j]=1; } } } }; Prime p; ll f(ll x) { ll k=1e10; return x%k; } //ll qpow(ll a) //{ // int n=a; // ll b=1; // while(n) // { // if(n&1) // b=f(b*a); // a=f(a*a);//这里可能会越界 // n>>=1; // } // return b; //} ll qpow(ll a) { ll ans=1; for(int i=0;i<a;i++) ans=f(ans*a); return ans; } int main() { ll ans=0; for(ll i=1;i<=1000;i++) { ans=f(ans+qpow(i)); } cout<<ans; return 0; }View Code