acm2058[通俗易懂]

acm2058[通俗易懂]intmain(){   intn,m; intl,i,a,b,s; while(scanf(“%d%d”,&n,&m),n+m)  { l=(int)sqrt(2*m); for(i=l;i>=1;i–)    { s=(2*m+i-i*i)/2; if(s%i==0)     


Jetbrains全系列IDE稳定放心使用

int main(){     
int n,m; 
int l,i,a,b,s; 
while (scanf(“%d%d”,&n,&m),n + m)    
{ 
l = (int)sqrt(2 * m); 
for (i = l; i >= 1; i–)        
{ 
s = (2*m + i – i*i)/2; 
if(s % i == 0)           
{ 
a = s / i; 
if(a+i-1 > n) break; 
printf(“[%d,%d]\n”,a,a + i – 1); 
} 
} 
printf(“\n”);   
} 
return 0; 
}  

最后,说一下我对代码的解释

假设:1,2,3,…,n中的i个数(a1,a2,…,ai)满足sum(a1,a2,…,ai)=m。

那么,1<=a1<=m,

当a1=1时,i=ai,i取得最大值,由于i*(1+i)/2=m,i=sqrt(2*m-i)<sqrt(2*m);

当a1=m时,i=1,i取得最小值。

所以,1<=i<=sqrt(2*m)。

同时我们知道,两个长度都为i却不相同的连续数列,它们的和不可能都等于m。

从上面的讨论可知,满足要求的数列的长度i在[1,sqrt(2*m)]之间,且不重复。

现在从sum(a1,a2,…,ai)=m反推,由于ai=a1+i-1,可知:

sum(a1,a2,…,ai) = (a1+ai)*i/2 = (a1+a1+i-1)*i/2= m

a1*i = (2*m+i-i*i)/2 = s

那么,存在1,2,3,…,n中的i个数(a1,a2,…,ai)满足sum(a1,a2,…,ai)=m,

等价于,对于s=(2*m+i-i*i)/2有:s%i=0(因为a1=s/i),且s/i+i-1<=n(因为ai=s/i+i-1)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186846.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • spring整合mybatis详细步骤

    spring整合mybatis详细步骤spring整合mybatis的详细步骤

    2022年5月5日
  • 云大使推广中的常见热门问题「建议收藏」

    云大使推广中的常见热门问题「建议收藏」云大使推广中的常见热门问题

    2022年4月21日
  • 如何使用eclipse软件创建一个Java项目?[通俗易懂]

    如何使用eclipse软件创建一个Java项目?[通俗易懂]同学们在参加Java的时候老师肯定会教给你们如何去创建一个项目,这里怕有些同学没记住,所以单独为大家分享一篇如何使用eclipse软件创建一个Java项目教程,感觉有用的话收藏转发一下~eclipse创建Java项目教程1.首先我们需要打开eclipse软件,之后找到左上角的file选项卡,点击一下依次选择new-Javaproject选项,如图所示。2.随后会打开一个新建页面,在里面我们找到箭头所示的projectname处,在里面填写我们的Java项目名称,直接选择finish即可完成创建。

    2022年7月9日
  • chrome录制脚本的工具_chrome录屏插件

    chrome录制脚本的工具_chrome录屏插件Jmeter录制脚本工具之chrome插件–BlazeMeter

    2022年4月21日
  • ubuntu 20.04 安装中文输入法_如何在ubuntu中安装中文输入法

    ubuntu 20.04 安装中文输入法_如何在ubuntu中安装中文输入法在Ubuntu系统中,无论是写文档还是在程序中写注释,都经常需要用到中文输入法。本文简单介绍了三种输入法框架,然后详细介绍了在Ubuntu20.04系统中,IBus框架和Fcitx框架支持的中文输入法的配置和安装。……

    2022年9月26日
  • 范冰:增长黑客入门训练营

    范冰:增长黑客入门训练营之前刚入门产品的时候,增长的概念已经很流行了,连着读了SeanEllis的《增长黑客:如何低成本实现爆发式成长》和范冰的《增长黑客:创业公司的用户与收入增长秘籍》以及相应的公开课,如果你不知道SeanEllis,那我觉得你应该认真花点时间去了解一下这位“增长黑客之父”了,之前已经分享过SeanEllis的公开课和关于这本书的读书笔记,比较开心的是无意中发现2019年《增长黑客:创业公司的用户与收入增长秘籍》的作者范冰就已经亲自开了这本增长黑客的课程,还是觉得好物不容错过!欢迎要资源,欢迎交流沟通过~

    2022年5月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号