数表( table )

题目描述

有一张n×m的数表,其第i行第j列(1≤i≤n,1≤j≤m)的数值为能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。

输入

输入包含多组数据。

输入的第一行一个整数Q表示测试点内的数据组数,接下来Q行,每行三个整数n,m,a(|a|≤109)描述一组数据。

输出

对每组数据,输出一行一个整数,表示答案模231的值。

样例输入

<span style="color:#333333"><span style="color:#333333">2
4 4 3
10 10 5
</span></span>

样例输出

<span style="color:#333333"><span style="color:#333333">20
148
</span></span>

提示


solution

好题,我不会

令f[i]表示i的约数的和

题目求

gcd提出来

反演,再把gcd提出来

这就有60分了

但是这样子式子还是化不了

我们枚举i=k*d

这样子就能把nm的往前提

把询问按a排序,按a依次加入f[k]*mu[i/k]

前面的部分可以分块,后边的前缀和起来

也就是我要支持加入和查询前缀和。

树状数组即可。

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 2000006
using namespace std;
int n,Q,mu[maxn],pri[maxn],flag[maxn],sum[maxn],Max,tot;
int ans[maxn],tree[maxn];
struct node{
int n,m,a,b,id;
}s[maxn],f[maxn];
bool cmp(node A,node B){
return A.a<B.a;
}
void add(int i,int v){
for(;i<=Max;i+=i&-i)tree[i]+=v;
}
int ask(int i){
int sum=0;for(;i;i-=i&-i)sum+=tree[i];
return sum;
}
int Query(int N,int M){
int nex,sum=0;
if(N>M)swap(N,M);
for(int i=1;i<=N;i=nex+1){
nex=min(N/(N/i),M/(M/i));
//if(nex<i)exit(0);
sum+=(N/i)*(M/i)*(ask(nex)-ask(i-1));
}
return sum;
}
int main()
{
n=1000000;mu[1]=1;
for(int i=2;i<=n;i++){
if(!flag[i]){
pri[++tot]=i;mu[i]=-1;
}
for(int j=1;j<=tot&&pri[j]<=n/i;j++){
flag[i*pri[j]]=1;mu[i*pri[j]]=-mu[i];
if(i%pri[j]==0){
mu[i*pri[j]]=0;
break;
}
}
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j+=i)f[j].a+=i;
}
for(int i=1;i<=n;i++)f[i].b=i;
sort(f+1,f+n+1,cmp);
cin>>Q;
for(int i=1;i<=Q;i++){
scanf("%d%d%d",&s[i].n,&s[i].m,&s[i].a);
s[i].id=i;
if(s[i].n>s[i].m)swap(s[i].n,s[i].m);
Max=max(Max,s[i].m);
} sort(s+1,s+Q+1,cmp);
int l=1;
for(int i=1;i<=Q;i++){
for(;f[l].a<=s[i].a&&l<=n;l++){
for(int N=f[l].b;N<=Max;N+=f[l].b)
add(N,f[l].a*mu[N/f[l].b]);
}
ans[s[i].id]=Query(s[i].n,s[i].m);
if(ans[s[i].id]<0)ans[s[i].id]+=(1<<31);
}
for(int i=1;i<=Q;i++)printf("%d\n",ans[i]);
return 0;
}

数表( table )的更多相关文章

  1. 【JZOJ3623】【SDOI2014】数表(table) 树状数组+离线+莫比乌斯反演

    题面 100 \[ Ans=\sum_{i=1}^n\sum_{j=1}^mg(gcd(i,j)) \] 其中, \[ g(d)=\sum_{i|d}i \] 我们注意到\(gcd(i,j)\)最多有 ...

  2. Lua基础之table详解

    概要:1.table特性:2.table的构造:3.table常用函数:4.table遍历:5.table面向对象 原文地址:http://blog.csdn.net/dingkun520wy/art ...

  3. Lua学习(1)——table

    table类型实现了“关联数组”.“关联数组”是一种具有特殊索引方式的数组.不仅可以通过证书来索引它,还可以使用字符串或其他类型(除了nil)来索引它.table是Lua中主要的数据结构机制(事实也是 ...

  4. lua的table库中的常用函数总结

    table是Lua语言中的一种重要的数据类型, table 的一些特性简单列举如下: (1).table 是一个“关联数组”,数组的索引可以是数字或者是字符串; (2).table 的默认初始索引一般 ...

  5. R自动数据收集第一章概述——《List of World Heritage in Danger》

      导包     library(stringr) library(XML) library(maps) heritage_parsed <- htmlParse("http://en ...

  6. RTTI (Run-Time Type Identification,通过运行时类型识别) 转

    参考一: RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   RTTI提供了以下两个 ...

  7. C++的 RTTI 观念和用途(非常详细)

    自从1993年Bjarne Stroustrup [注1 ]提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(exception handling)需要RTTI:最近新推出的C++ 或多或少 ...

  8. R_基本统计分析_06

    summary()提供基础的统计信息 sapply(x,FUN,options)可以指定统计函数 fivenum()可以返回图基五数 Hmisc 中的describe(data)返回变量,观测的变量, ...

  9. Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>

    引言 前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用. 首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储 ...

随机推荐

  1. redis 面试题

    https://www.cnblogs.com/ftl1012/p/redisExam.html 1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashM ...

  2. ethereum(以太坊)(七)--枚举/映射/构造函数/修改器

    pragma solidity ^0.4.10; //枚举类型 contract enumTest{ enum ActionChoices{Left,Right,Straight,Still} // ...

  3. 第五章 标准I/O

    5.1 引言 本章说明标准 I/O 库.因为不仅在 UNIX 上,而且在很多操作系统上都实现了此库,所以它由 ISO C 标准说明. 标准 I/O 库处理很多细节,例如缓冲区分配,以优化长度执行 I/ ...

  4. POJ 3977 折半枚举

    链接: http://poj.org/problem?id=3977 题意: 给你n个数,n最大35,让你从中选几个数,不能选0个,使它们和的绝对值最小,如果有一样的,取个数最小的 思路: 子集个数共 ...

  5. Android 程序中获取一个反向 Shell

    代码如下: String command = "ls -al /"; Process process = Runtime.getRuntime().exec(command); 之 ...

  6. J2EE中getParameter与getAttribute以及对应的EL表达式

    摘自http://blog.csdn.net/woshixuye/article/details/8027089 getParameter ① 得到的都是String类型的.如http://name. ...

  7. TouTiao开源项目 分析笔记9 实现一个问答主页面

    1.根据API返回创建几个基础的Bean 1.1.WendaArticleDataBean类 API返回的数据如下: /** * cell_type : 36 * extra : {"wen ...

  8. Android 数据库的线程合作

    前言:之前琢磨了很多线程相关的东西,一直摸不着头脑,直到学到了数据库,终于发现世界原来如此美好,任何事物都有存在的理由. 1.主线程,我把它比作长江,作为母亲河的长江,想必大家每个人都不会很陌生. 2 ...

  9. Go实现try-catch-finally机制

    前言 许多主流语言诸如:Java.Python都实现了try-catch-finally机制,而Go处理错误的方式却与前两种语言不同.关于Go处理异常的方式是好是坏仁者见仁智者见智,笔者还是更喜欢tr ...

  10. 手把手教你如何逐步安装OpenStack

    [TechTarget中国原创] 尽管OpenStack官方提供的在线安装教程和分步向导能够为管理员提供很大帮助,但是依然存在很多不尽如人意的地方.因此在Ubuntu上安装OpenStack的过程当中 ...