hdu 4466 成都2012区域赛C题
2012-11-18 13:41
387 查看
#pragma comment(linker, "/STACK:102400000,102400000") #include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<queue> #include<stack> #include<string> #include<map> #include<set> #include<cmath> #include<cassert> #include<cstring> #include<iomanip> using namespace std; #ifdef _WIN32 #define i64 __int64 #define out64 "%I64d\n" #define in64 "%I64d" #else #define i64 long long #define out64 "%lld\n" #define in64 "%lld" #endif /************ for topcoder by zz1215 *******************/ #define FOR(i,a,b) for( int i = (a) ; i <= (b) ; i ++) #define FF(i,a) for( int i = 0 ; i < (a) ; i ++) #define FFD(i,a,b) for( int i = (a) ; i >= (b) ; i --) #define S64(a) scanf(in64,&a) #define SS(a) scanf("%d",&a) #define LL(a) ((a)<<1) #define RR(a) (((a)<<1)+1) #define pb push_back #define pf push_front #define X first #define Y second #define CL(Q) while(!Q.empty())Q.pop() #define MM(name,what) memset(name,what,sizeof(name)) #define MC(a,b) memcpy(a,b,sizeof(b)) #define MAX(a,b) ((a)>(b)?(a):(b)) #define MIN(a,b) ((a)<(b)?(a):(b)) #define read freopen("in.txt","r",stdin) #define write freopen("out.txt","w",stdout) const int inf = 0x3f3f3f3f; const i64 inf64 = 0x3f3f3f3f3f3f3f3fLL; const double oo = 10e9; const double eps = 10e-9; const double pi = acos(-1.0); const int mod = 1000000007; const int maxn = 5000001; i64 f[maxn]; int s[maxn]; i64 range(int l,int r) { l=(l+1)&(0x7ffffffe); r&=(0x7ffffffe); return (r-l)/2+1; } i64 find(int x) { i64 temp; i64 re; i64 l,r; if(x%2==0) { x/=2; temp = x/3; l = x-2; r = x-3*temp+1; re = (l+r)*temp/2; re += range(x+1,x+temp); re/=2; } else { x/=2; temp = (x-1)/3; l = x; r = x-3*temp; re = (l+r)*(temp+1)/2; re += range(x+1,x+temp+1); re/=2; } return re; } void start() { for(int i=1;i<maxn;i++) { f[i]=find(i); } int temp; for(int i=3;i<maxn;i++) { temp = i; while(true) { temp+=i; if(temp<maxn) { f[temp]-=f[i]; } else { break; } } } for(int i=0;i<maxn;i++) { f[i]%=mod; } s[0]=1; s[1]=2; for(int i=2;i<maxn;i++) { s[i]=2*s[i-1]; s[i]%=mod; } } int n; vector<int>a; int main() { int temp; start(); i64 ans; int tt=1; while(cin>>n) { ans=0; a.clear(); for(int i=1;i*i<n;i++) { if(n%i == 0) { a.pb(i); a.pb(n/i); } } temp = sqrt(double(n)); if(temp*temp == n) { a.pb(temp); } for(int i=0;i<a.size();i++) { ans+=f[a[i]]*s[n/a[i]-1]; ans%=mod; } cout<<"Case "<<tt++<<": "<<ans<<endl; } return 0; }
相关文章推荐
- HDU 4465 Candy 概率 (2012成都区域赛B题)
- HDU 4468 Spy KMP + 贪心 (2012成都区域赛E题)
- HDU 4473 Exam 有点技巧的暴力枚举 (2012成都区域赛J题)
- hdu 4466 Triangle (12年成都区域现场赛c题)(dp+组合数学)
- hdu 4444 Walk【2012 ACM/ICPC 金华区域赛C题】
- hdu 4443 Lost 【2012 ACM/ICPC 金华区域赛B题】
- hdu 4419 Colourful Rectangle (2012杭州区域赛 1010 )
- hdu 4472 Count (2012 ACM-ICPC 成都现场赛)
- hdu 4465 Candy(2012 ACM-ICPC 成都现场赛)
- HDU 4450 Draw Something 2012亚洲区域赛金华现场赛I题
- HDU 4442 Physical Examination 2012亚洲区域赛金华现场赛A题
- Hdu 4292 Food (2012成都赛区网络赛第五题,拆点网络流)
- HDU-4472-Count (2012 ACM/ICPC成都现场赛)
- HDU 4466 HDOJ Triangle 2012ACM亚洲赛成都赛区C题
- HDU 4466 Triangle(12年成都)
- HDU 4451 Dressing 2012亚洲区域赛金华现场赛
- hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***
- hdu 4296 (成都赛区2012网络赛)
- hdu 4288 (成都赛区2012网络赛)
- HDU 4474 Yet Another Multiple Problem(12年成都区域赛-K题-BFS)