18 142

297 328

388 412

1998 2002

这道题目假设用C++能够直接枚举,非常快就能够过,并且时间,可是这样对我们学习数论知识没有一点帮助。由于数论不仅仅是简单的枚举很多其它的是公式的推导,所以我对于数论题目尽可能的使用耗时长一点的语言。来让我将代码变得更加简短,高速,比方这道题目。用一种方法python超时,可是c++46ms就能够过了,可是假设我用python将这道题目过了,用c++直接就是0ms。

我使用了一个公式推导式针对開始的前后两个数之差进行枚举计算

m = math.sqrt(float(2 * n) + pow(a * 0.5,2.0)) - a * 0.5

if m == int(m):

print i + 1,i + int(m)

这个会超时,原因是,无论这个数符不符合条件,你都要进行这个式子的运算

会导致这种结果,最后一个数据会超时:

如此进行代码优化:

对于等差数列公式得:(2a + m)(m + 1) = 2n -> 2a(m + 1) = 2n - m(m + 1) - > 2a = 2n / (k + 1) - m

又由于a为整数所以。2n % (k + 1)不为零的直接排除,接着是(2n / (k + 1) - m) % 2不为零的能够排除

这样非常多情况仅仅要推断一下就能够了,根本不须要进行什么计算。复杂度自然会降低非常多

接着就是答案输出了

这里提供pythonAC代码:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import math

n = int(raw_input())

cnt = int(math.sqrt(2 * n))

i = cnt

while cnt > 0:

if not ((2 * n) % (cnt + 1)):

m = 2 * n / (cnt + 1)

m -= cnt

m >>= 1

if (2 * m + cnt) * (cnt + 1) / 2 == n and m >= 0:

print m,m + cnt

cnt -= 1

python 正整数 连续多个数之和_vijos - P1302连续自然数和 (公式推导 + python)相关推荐

  1. python 正整数 连续多个数之和_[算法]正整数分解为几个连续自然数之和

    题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...

  2. python中判断一个数是否为素数_【转载】Python脚本判断一个数是否为素数的几种方法...

    质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...

  3. chatgpt赋能python:Python一行输出8个数的神奇魔法!

    Python一行输出8个数的神奇魔法! 作为一位有10年Python编程经验的工程师,我想与大家分享一种神奇的方法,利用Python的一行代码输出8个数.这个方法简单易懂,并且非常实用,适合初学者和专 ...

  4. python计算整数区间[m、n所有整数之和_Python:就区间正整数内所有素数之和

    前言 Python的学习记录与分享--PTA程序设计类教学平台.如果你也正在学习关于此类的题目可以仔细阅读这篇文章,了解一下循环结构.素数的基本语法知识. 题目: 7-5就区间正整数内所有素数之和 ( ...

  5. 题目42:菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。

    题目转载:http://python.wzms.com/s/1/35 题目描述: 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和. 给出一个正整数k,要求 ...

  6. 2019.5.输入正整数n,再输入n个数,计算并输出这n个数之和。要求:本题必须使用递归完成,整个程序不允许使用循环。例如3 2 3 4,输出7

    1.题目:输入正整数n,再输入n个数,计算并输出这n个数之和.要求:本题必须使用递归完成,整个程序不允许使用循环.例如3 2 3 4,输出7 2.代码展示(复制可直接运行) import java.u ...

  7. 斐波那契数列_菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。

    描述 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和.给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少. 格式 输入格式 第1行是测 ...

  8. 蓝桥杯 算法训练 - 连续正整数的和 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27。   输入一个正整数 n(<=10000)   输出 m 行(n有m

    问题描述 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27. 输入一个正整数 n(<=10000) 输出 m 行(n有m种表示法),每行是两个正整数a,b ...

  9. python 条件语句判断连续三个数,Python_3_流程控制语句:条件判断语句(if语句),循环语句,嵌套...

    第三章 流程控制语句 简介 Python代码在执行时是按照自上向下顺序执行的. 通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次 流程控制语句分成两大类:条件判断语句,循环语句 ...

最新文章

  1. codeforces round 421 div2 补题 CF 820 A-E
  2. 微信十年,张小龙下一步要干什么?
  3. Zeppelin:用于区块链应用的开源安全智能合约架构
  4. VS编译时output/Error list窗口自动弹出设置
  5. dueros模拟测试没有请求后台_实战 | 用手写一个骚气的请求合并,演绎底层的真实...
  6. MySQL流程控制函数-case结构
  7. 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机||CSDN博文精选...
  8. Dao层抽取BaseDao公共方法
  9. combineByKey实例详解
  10. Atitit node.js问题解决总结t99 目录 1.1. 找不到node程序 1 1.2. GBK编码问题 1 2. 按行读取gbk编码问题 2 2.1. 先写入txt utf8 encode
  11. 手把手教你架构3D引擎高级篇系列四
  12. 解除百度文库复制限制
  13. 计算机图形学常用知识点,计算机图形学基础重点
  14. Teclast X80h安装linux,安装android-x86教程。(没法再贴吧发表,只有百度网盘在线阅读...
  15. Oracle数据库进行简单优化,Oracle数据库性能优化
  16. 互联网思维提升与电子商务转型
  17. 为什么我们买了股票就不涨被套,股票割肉就飞了?
  18. 集线器、交换机、路由器、猫
  19. 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台
  20. 用谷歌注册Kaggle没有出现验证码的情况

热门文章

  1. 初级测试开发面试题_初级开发人员在编写单元测试时常犯的错误
  2. jboss7 关闭日志打印_使用自定义日志记录处理程序在JBoss AS 7中跟踪SQL语句
  3. gradle入门_Gradle入门:简介
  4. javaone_JavaOne 2014 –有关提交的一些初步分析
  5. 为使节构建控制平面的指南第3部分-特定于域的配置API
  6. Spring Security中的SecurityContext和SecurityContextHolder是什么?
  7. 使用Arquillian和LocalStack脱机测试AWS云堆栈
  8. vaadin_5分钟内Google App Engine上的Vaadin App
  9. jOOQ类型安全数据库查询教程
  10. java线程池并发_Java并发教程–线程池