栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3547 The Boss on Mars

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3547 The Boss on Mars

#include <cstdio>#include <cstring>#include <iostream>using namespace std;typedef long long LL;const LL Mod = 1000000007;#define bit(k) (1<<(k))const int N = 10005;int cs, n, r, ans;int q[11111];bool vis[N];int que[11111], cnt;void Primetable(){ memset(vis, 0, sizeof(vis)); cnt = 0; for(int i=2; i < N; ++i) if(!vis[i]){ que[cnt++] = i; for(int j=i+i;j<N;j+=i) vis[j] = 1; }}inline int mul(int a, int b){ return (LL)a*b%Mod;}inline int add(int a, int b){ return ((LL)a+b+Mod)%Mod;}int quickpow(int a, int b){ int ret = 1, delta = a; while(b){ if(b&1) ret = mul(ret, delta); delta = mul(delta, delta); b>>=1; } return ret;}int calc(int u, int flag){ int p = n/u, u1, p1, p2; if(flag){ u1 = mul(u,u); u1 = mul(u1,u1); } else u1 = 1; p1 = mul(p, p+1); p1 = mul(p1, 2*p+1); p2 = mul(3,mul(p,p)); p2 = add(add(p2, mul(3,p)),-1); p1 = mul(p1, p2); p1 = mul(p1, cs); return mul(u1, p1);}void dfs(int u, int mark, int plus){ int x = __builtin_popcount(mark); if(u==r){ if(x&1) ans = add(ans,calc(plus,1));else ans = add(ans,-calc(plus,1)); return; } dfs(u+1,mark,plus); dfs(u+1,mark|bit(u),plus*q[u]);}int main(){ Primetable(); cs = quickpow(30, Mod-2); int tt, nn, last, i; scanf("%d",&tt); while(tt--){ scanf("%d",&n); nn = n; r = 0; for(i=0;i<cnt;++i) if(nn%que[i]==0){ q[r++] = que[i]; while(nn%que[i]==0) nn/=que[i]; } if(nn>1) q[r++] = nn; ans = 0; dfs(0, 0, 1); ans = add(ans, 1); ans = add(calc(n,0),-ans); printf("%dn", ans); } return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号