已知首项末项公差求和c语言,UVa 1363 (数论 数列求和) Joseph's Problem

本文探讨了一个数论问题,当k除以i的整数部分恒定时,余数形成等差数列。作者通过莫比乌斯反演的分块加速方法,提供了C++和C语言代码实现,展示了如何利用这个规律加速求解过程。涉及的代码简洁高效,适用于处理区间内数列求和问题。
摘要由CSDN通过智能技术生成

题意:

给出n, k,求

L3Byb3h5L2h0dHAvbGF0ZXguY29kZWNvZ3MuY29tL2dpZi5sYXRleD9cc3VtX3tpPTF9XntufWtcOiZhbXA7c3BhY2U7bW9kXDomYW1wO3NwYWNlO2k=.jpg

分析:

假设

L3Byb3h5L2h0dHAvbGF0ZXguY29kZWNvZ3MuY29tL2dpZi5sYXRleD9cbGVmdCZhbXA7c3BhY2U7XGxmbG9vciZhbXA7c3BhY2U7XGZyYWN7a317aX0mYW1wO3NwYWNlO1xyaWdodCZhbXA7c3BhY2U7XHJmbG9vcj1cbGVmdCZhbXA7c3BhY2U7XGxmbG9vciZhbXA7c3BhY2U7XGZyYWN7a317aSsxfSZhbXA7c3BhY2U7XHJpZ2h0JmFtcDtzcGFjZTtccmZsb29yPXA=.jpg,则k mod (i+1) = k - (i+1)*p = k - i*p - p = k mod i - p

则对于某个区间,i∈[l, r],k/i的整数部分p相同,则其余数成等差数列,公差为-p

然后我想到了做莫比乌斯反演时候有个分块加速,在区间[i, n / (n / i)],n/i的整数部分相同,于是有了这份代码。

#include

#include

using namespace std;

typedef long long LL;

int main()

{

LL n, k;

while(scanf("%lld%lld", &n, &k) == )

{

LL ans = ;

LL i, j, r = min(n, k);

for(i = ; i <= r; i = j + )

{

j = k / (k / i);

if(j > r) j = r;

LL d = -k / i;

LL l = j - i + ;

LL a1 = k % i;

ans += (LL) (a1*l + l*(l-)/*d);

}

if(n > k)

ans += (LL) (n-k) * k;

printf("%lld\n", ans);

}

return ;

}

代码君

后来试了一下lrj的代码,比我的短还比我的快,给跪了

// UVa1363 Joseph's Problem

// Rujia Liu

#include

#include

using namespace std;

// 首项为a,公差为-d,除了首项之外还有n项

// 末项为a-n*d,平均数为(2*a-n*d)/2

long long sum(int a, int d, int n) {

return (long long)(*a-n*d)*(n+)/;

}

int main() {

int n, k;

while(cin >> n >> k) {

int i = ;

long long ans = ;

while(i <= n) {

int q = k % i, p = k / i;

int cnt = n - i; // 最多还有n - i项

if(p > ) cnt = min(cnt, q / p);

ans += sum(q, p, cnt);

i += cnt + ;

}

cout << ans << "\n";

}

return ;

}

更快的代码君

C语言程序设计100例之(23):数列求和

例23  数列求和 问题描述 已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成: ① 若乘积为一位数,则该乘积即为数列的后继项: ② 若乘积为二位数,则该乘积的十位上的数字和个 ...

李洪强漫谈iOS开发&lbrack;C语言-047&rsqb;-数列求和

// //  main.c //  53 - 数列求和 - 李洪强 // //  Created by vic fan on 16/10/15. //  Copyright © 2016年 李洪强. ...

40&period; 特殊a串数列求和

特殊a串数列求和 #include int main() { int i, a, n, item, sum, temp; while (scanf("%d % ...

GMA Round 1 数列求和&lpar;Hard&rpar;

传送门 数列求和(Hard) 在数列{$a_n$}中,$a_1=-\frac{1}{4}$,$\frac{1}{a_{n+1}}+\frac{1}{a_n}=\begin{cases}-3(n为偶数) ...

数列求和 Exercise06&lowbar;13

/** * @author 冰樱梦 * 时间:2018年下半年 * 题目:数列求和 * */ public class Exercise06_13 { public static void main( ...

解题报告:luogu P5745 【深基附B例】数列求和

题目链接:P5745 [深基附B例]数列求和 现在想说:\(O(N)\)的题要不怎么也想不出来,要不灵光乍现,就像这道题. 我们维护一个类似单调队列的加法单调队列: 若相加大于此数,就将队尾元素弹出, ...

luogu P4948 数列求和 推式子 简单数学推导 二项式 拉格朗日插值

LINK:数列求和 每次遇到这种题目都不太会写.但是做法很简单. 终有一天我会成功的. 考虑类似等比数列求和的东西 帽子戏法一下. 设\(f(k)=\sum_{i=1}^ni^ka^i\) 考虑\(a ...

UVa 1363 - Joseph&&num;39&semi;s Problem(数论)

链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

随机推荐

java去处重复输出

去除重复输出问题:   数组:大量相同数据类型的集合 数据类型[ ] 数组名=new 数据类型[长度] 数据类型[ ] 数组名=new 数据类型[ ]{值1,值 2,值3.....} 数据类型[ ] ...

java设计模式类图大全

近来在看书实现GoF的23个设计模式,自己一点点地用建模工具按照自己的理解画出类图(是比较符合我个人思考理解的,个人觉得比通用类图更详细些),碰巧找到了一个挺好用的UML建模工具StarUML,也刚好 ...

百度编辑器ueditor前台代码高亮无法自动换行解决方法

这两天本站成功安装整合了百度编辑器ueditor,用着还挺不错,但是遇到了点小问题 问题描述:   在内容里面插入代码高亮显示,后台编辑器中是可以自动换行的,但是发表后,在前台查看,发现代码不能自动换 ...

Django里,如何更改ADMIN管理后台的显示

今天在慢慢完善管理后台的一些体验, 第一是要扩展默认显示类,就是现在弄的. 第二是要让一些显示框更自然友好,这是下一次要作的. 在各个app的admin.py里,加入相关的MIXIN类 class S ...

A shallow summary of oracle log miner

Sometimes, we should recover one or more rows data which is deleted carelessly by users, but it is n ...

FAAC1&period;28 在海思HI3520D&sol;HI3515A平台linux中的编译 优化

FAAC1.28的下载地址:http://www.audiocoding.com/downloads.html 怎样编译: 1../configure --host=arm-hisiv100nptl- ...

while&lpar;true&rpar;应用 之 实现自己的消息队列

早些时候,一直有个疑问,就是比如你从前端发一个操作之后,后台为什么能够及时处理你的东西呢?当然了,我说的不是,服务器为什么能够立即接收到你的请求之类高大上的东西.而是,假设你用异步去做一个事情,而后台 ...

Java POI读取Excel数据&comma;将数据写入到Excel表格

1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...

Python3&period;4 &plus; Django1&period;7&period;7 搭建简单的表单并提交

后面还有一个问题,是我把txt生成了,但是网页没有返回我还不知道,现在怎么直接返回txt并且展示出来txt 的内容,希望大牛不吝赐教 首先有一个问题 django1.7之前,这样用: HttpResp ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值