zzuli1783: 简单的求和---求因子和

1783: 简单的求和

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

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
#define N 1000002
#define INF 0x3f3f3f3f
#define met(a, b) memset(a, b, sizeof(a))

long long sum[N]={0, 1};

void make()///打表求N以内的所有因子和;
{
    for(int i=2; i<N; i++)
        sum[i]+=i+1; ///加上本身和1;
    for(int i=2; i*i<N; i++)
    {
        for(int j=i+1; i*j<N; j++)
            sum[i*j]+=i+j;///i和j一定是i*j的因子;
        sum[i*i]+=i;
    }
    for(int i=1; i<N; i++)
        sum[i]+=sum[i-1];
}

int main()
{
    make();

    int T, l, r;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d %d", &l, &r);
        printf("%lld\n", sum[r]-sum[l-1]);
    }
    return 0;
}

  

时间: 2024-11-05 17:33:16

zzuli1783: 简单的求和---求因子和的相关文章

(打表+优化)简单的求和 -- zzuli -- 1783

http://acm.zzuli.edu.cn/problem.php?id=1783 1783: 简单的求和 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 170  Solved: 31 SubmitStatusWeb Board Description 定义f(i)代表i的所有因子和(包括1和i),给定一个l,r.求f(l)+f(l+1)+...+f(r). Input 第一行输入一个t(t<1000),代表有t组测试数据,接下来每行输入两个数

F#之旅3 - F# PK C#:简单的求和

原文链接:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-sum-of-squares.html Comparing F# with C#: A simple sumF# PK C#:简单的求和 To see what some real F# code looks like, let's start with a simple problem: "sum the squares from 1 to N

简单的求和(打表)

简单的求和 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 130  Solved: 20SubmitStatusWeb Board 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 每行输出一个整数,代表

hdu1215七夕节 筛选法求公因子和

hdu1215七夕节 数据量比较大,筛选法求公因子和即可. #include <iostream> #include<cstdio> #include<string.h> #define maxn 500005 using namespace std; int ans[maxn]; int main() { int cas; int n; cin >> cas; memset(ans,0,sizeof(ans)); for(int i = 1;i <

简单算术表达式求值

#include <stdio.h> #include <string.h> int main() { int n,i; char a[200]; int f=0,l=0; gets(a); for(i=0;i<strlen(a);i++) { if(a[i]>='0'&&a[i]<='9')//如果是数字 { if(a[i+1]>='0'&&a[i+1]<='9')//如果后面那个也是数字 { f=(f+a[i]-48

HYSBZ 1036 树链剖分(单点更新区间求和求最大值)

http://www.lydsy.com/JudgeOnline/problem.php?id=1036 Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 Input 输入

求和求到手软

描述 LN想要知道大家的小学数学好不好. 现在他想让你求出几个数的和. 你能搞定么? 输入 多组测试数据 一组测试数据一行. 输出 一个数sum,表示结果.(保证在 int 范围内) 样例输入 2 3 5 5 6 7 8 1 2 3 4 5 6 7 8 9 10 样例输出 10 26 55 代码如下 这道题考察的点很清晰,就是对输入数据的处理. 如果每组测试数据的 n 个数得到后,求和就非常简单,而且保证在int范围内. 如果用普通的整数输入的话,每组测试数据之间没有明显的区分度.所以我们应该有

ZZULI 1783 简单的求和

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 题意:中文哒..就不多说了,显然这道题卡时间,暴力不现实,只能先打表,据说这道题考

线段树经典操作模板(单点更新,替换;区间更新,替换;区间求和求最值)

对于线段树的讲解此篇不再赘述,下面列出线段树应用中最常用的几种操作的代码.(具体题目未贴出,仅供有一定基础者参考代码风格) 另外,注意多组输入要写scanf("%d%d",&n,&m)!=EOF,线段树的题肯定要用c语言的输入输出,要使用字符数组,不用字符串,输入字符的时候要加getchar()吞噬空行.. (1)单点增减,区间求和: #include<iostream> #include<stdio.h> #include<string&