【 ZZULIOJ1783】简单的求和 【筛法思想求解】

xiaoxiao2021-02-28  108

Description

定义f(i)代表i的所有因子和(包括1和i),给定一个l,r。求f(l)+f(l+1)+…+f(r)。

Input

第一行输入一个t(t<1000),代表有t组测试数据,接下来每行输入两个数字l,r,(1<=l<=r<=1000000)。

Output

每行输出一个整数,代表和。

Sample Input

2 1 2 3 4 Sample Output

4 11 HINT

Source

豆子

看代码吧 。

#include<bits/stdc++.h> #define LL long long using namespace std; const int MAXN = 1000000 +10; const int MAXM = 1e4; LL sum[MAXN],ans[MAXN]; void dabiao(){ for(int i=2;i*i<=MAXN;i++){ for(int j=i;i*j<=MAXN;j++){ if(i!=j) ans[j*i]+=i+j; else ans[j*i]+=i; } } sum[1]=1; for(int i=2;i<=MAXN;i++) sum[i]=sum[i-1]+ans[i]+i+1; } int main(){ dabiao(); int t;cin>>t; while(t--){ LL l,r;scanf("%lld%lld",&l,&r); printf("%lld\n",sum[r]-sum[l-1]); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-60401.html

最新回复(0)