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

本文介绍了一种高效的算法,用于解决特定数学问题:计算给定区间内所有整数的因子和。通过预先计算并存储部分结果,该算法能在短时间内响应大量查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
### ZZULIOJ 1156 题目解决方案 ZZULIOJ 平台上的题目编号通常对应特定类型的算法挑战或编程练习。对于题目1156的具体内容并未直接提及,但从其他相似题目的模式可以推测其可能涉及的内容以及解决方法。 #### 假设题目类型为多实例测试问题 如果ZZULIOJ 1156属于多实例测试类别,那么可以根据已知的ZZULIOJ 1078中的描述来构建解答框架[^3]: ```c #include <stdio.h> int main() { int i, n; // 获取测试案例的数量 scanf("%d", &n); for (i = 1; i <= n; i++) { int a, b; // 处理每一组测试数据 scanf("%d %d", &a, &b); // 执行所需的操作并输出结果 printf("%d\n", a + b); } return 0; } ``` 这段代码展示了如何在一个程序执行期间处理多个独立的数据集。通过外部循环遍历所有给定的测试用例数量`n`,内部则负责读取具体数值并对它们进行操作(此处假设是对两个整数求和),最后打印出相应的结果。 #### 如果涉及到更复杂的逻辑结构 考虑到不同题目有不同的需,比如可能是寻找最优解、路径规划或者其他高级算法应用,此时就需要更加详细的题目说明才能给出针对性的回答。然而基于现有信息无法确切得知ZZULIOJ 1156的确切要。 为了提供更具指导性的帮助,建议查阅该平台上有关此题目的官方文档或者社区讨论区获取更多细节。这有助于理解具体的业务场景技术难点所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值