51nod - 1586 - 约数和 - 水题
Posted yinku
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod - 1586 - 约数和 - 水题相关的知识,希望对你有一定的参考价值。
https://www.51nod.com/Challenge/Problem.html#problemId=1586
一眼看过去居然一点思路都没有的,一言不合就打表,打贡献表。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n = 25;
int a[200];
void update_b(int id)
for(int i = 1; i <= id; ++i)
if(id % i == 0)
a[i]++;
void show_c(int id)
memset(a, 0, sizeof(a));
for(int i = 1; i <= id; ++i)
if(id % i == 0)
update_b(i);
printf("c[%d]=\n ", id);
for(int i = 1; i <= n; ++i)
printf("%d%c", a[i], " \n"[i == n]);
int main()
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
for(int i = 1; i <= n; ++i)
show_c(i);
return 0;
好像a[i]位置对c[j]的贡献就是d(j/i)的样子,所以就预处理出d表就完事了?
数字不大,d表有nlogn的出法。但是暴力分解因子果断T,预处理所有数的因子也是T。原因在于因子是根号级别的,但是正解是直接更新a,是log级别的。
以上是关于51nod - 1586 - 约数和 - 水题的主要内容,如果未能解决你的问题,请参考以下文章