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\n", ans); }
题目:
Problem A: 非完美数
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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