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 - 约数和 - 水题的主要内容,如果未能解决你的问题,请参考以下文章

51nod1586 约数和

51nod1118(水题)

水题水一波

51nod 数数字(水题)

Codeforces 939A题水题

51nod 1717 好数 (水题)