ZZUOJ 10507: 非完美数

题目链接http://acm.zzu.edu.cn:8000/problem.php?id=10507

题目大意:求L到R区间内所有数与小于它自己的约数的差的绝对值的和。

解题思路:拿个筛子筛一筛。注意1的时候还是1以及long long

代码:

const int maxn = 1e6 + 5;
typedef long long ll;
int l, r;
ll a[maxn], sum[maxn];
 
void dowork(){
    memset(a, 0, sizeof(a));
    for(int i = 1; i < maxn; i++) a[i] = i - 1;
    a[1] = 1; 
    for(int i = 2; i <= 1e6 / 2; i++){
        for(int j = i * 2; j <= 1e6; j += i){
            a[j] -= i;
        }
    }
    memset(sum, 0, sizeof(sum));
    for(int i = 1; i < maxn; i++){
        sum[i] = sum[i - 1] + abs(a[i]);
    }
}
int main(){
    dowork();
    scanf("%d %d", &l, &r);
    ll ans = sum[r] - sum[l - 1];
    printf("%lld
", ans);
}

题目:

Problem A: 非完美数

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 99  Solved: 12
[Submit][Status][Web Board]

Description

Raywzy定义一个数x是完美的,当且仅当x等于他的所有约数(比x小)之和。比如,6是完美的的(6=1+2+3).
根据这个定义,Raywzy假设一个数x的不完美度为x与所有约数(比x小)差的绝对值.显然完美数的不完美度是0.f(6)=|6-1-2-3|=0.
现在给定一个区间[L,R],Raywzy想知道L到R的不完美度之和.你能帮帮他么?

Input

两个数L,R表示这个区间.(1<=L<=R<=10^6).

Output

这个区间所有数不完美度之和.

Sample Input

2 3

Sample Output

3
原文地址:https://www.cnblogs.com/bolderic/p/7497170.html