首页 > 代码库 > BZOJ2045 双亲数
BZOJ2045 双亲数
2301的弱化版。。。(弱过头了的说)
真是。。。为什么2301都1A了这道题却1RE+1A啊。。。蒟蒻到底了。。。
什么时候搞懂了在写题解什么的。。。
1 /************************************************************** 2 Problem: 2045 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:360 ms 7 Memory:9596 kb 8 ****************************************************************/ 9 10 #include <cstdio>11 #include <cmath>12 #include <algorithm>13 14 using namespace std;15 typedef long long ll;16 const int N = 1000005;17 int u[N], p[N], tot;18 bool v[N];19 20 inline int read(){21 int x = 0;22 char ch = getchar();23 while (ch < ‘0‘ || ch > ‘9‘)24 ch = getchar();25 26 while (ch >= ‘0‘ && ch <= ‘9‘){27 x = x * 10 + ch - ‘0‘;28 ch = getchar();29 }30 return x;31 }32 33 void pre_work(){34 u[1] = 1;35 int i, j, K;36 for (i = 2; i < N; ++i){37 if (!v[i])38 p[++tot] = i, u[i] = -1;39 for (j = 1; i * p[j] < N && j <= tot; ++j){40 v[K = i * p[j]] = 1;41 if (i % p[j] == 0){42 u[K] = 0; 43 break;44 }else u[K] = -u[i];45 }46 }47 for (i = 2; i < N; ++i)48 u[i] += u[i - 1];49 }50 51 ll work(int n, int m, int k){52 n /= k, m /= k;53 if (n > m) swap(n, m);54 ll res = 0;55 int i, last;56 for (i = 1; i <= n; i = last + 1){57 last = min(n / (n / i), m / (m / i));58 res += (ll) (u[last] - u[i - 1]) * (n / i) * (m / i);59 }60 return res;61 }62 63 int main(){64 pre_work();65 int a = read(), b = read(), k = read();66 printf("%lld\n", work(a, b, k));67 return 0;68 }
BZOJ2045 双亲数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。