hunnu11546:Sum of f(x)
Posted yjbjingcha
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hunnu11546:Sum of f(x)相关的知识,希望对你有一定的参考价值。
Problem description |
令f(x)为x的全部约数之和,x的约数即能够被x整除的数。如f(24)=1+2+3+4+6+8+12+24=60),求 f(l) + f(l + 1) + …… + f(r) |
Input |
第一行为一个整数T(T<=100000),表示数据的组数。
|
Output |
对每组数据,输出f(l)+f(l+1)+……+f(r) 的和 |
Sample Input |
2 3 5 10 20 |
Sample Output |
17 270 |
Problem Source |
HUNNU Contest |
開始用这样的方法来求
for(i = 3; i<=200000; i++) { a[i] = 1+i; for(j = 2; j*j<=i; j++) { if(i%j==0) { a[i]+=j; if(i/j!=j) a[i]+=(i/j); } } }
超时。改成
for(i = 1; i<=200000; i++) { for(j = 1; i*j<=200000; j++) { a[i*j]+=i; } }
才AC
开了一个变量去级数,发现上面的运算了5千多W次
以下的才两百多W次
看来区别还是蛮大的
#include <iostream> #include <stdio.h> #include <string.h> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <math.h> #include <bitset> #include <algorithm> #include <climits> #include <time.h> using namespace std; #define LS 2*i #define RS 2*i+1 #define UP(i,x,y) for(i=x;i<=y;i++) #define DOWN(i,x,y) for(i=x;i>=y;i--) #define MEM(a,x) memset(a,x,sizeof(a)) #define W(a) while(a) #define gcd(a,b) __gcd(a,b) #define LL long long #define N 200005 #define MOD 1000000007 #define INF 0x3f3f3f3f #define EXP 1e-8 LL a[N]; LL sum[N]; void init() { LL i,j,k; MEM(a,0); MEM(sum,0); for(i = 1; i<=200000; i++) { for(j = 1; i*j<=200000; j++) { a[i*j]+=i; } } for(i = 1; i<=200000; i++) sum[i] = sum[i-1]+a[i]; } int main() { LL i,j,k; int l,r; init(); int t; scanf("%d",&t); while(t--) { scanf("%d%d",&l,&r); printf("%I64d\n",sum[r]-sum[l-1]); } return 0; }
以上是关于hunnu11546:Sum of f(x)的主要内容,如果未能解决你的问题,请参考以下文章
Json与Ajax交互报错解决No converter found for return value of type: class com.github.pagehelper.PageInfo(代码片
codeforces805F Expected diameter of a tree
ueditor禁用编辑的时候报错:Uncaught TypeError: Cannot read property 'contentEditable' of undefined(代码片
java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors(代码片