Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

Python真题案例之小学算术

阶乘精确值

需求:输入一个整数n,输出n的阶乘精确值。

示例:

输入:5

输出:120

解析:

$n!$ 即 $n(n-1)(n-2)...2*1$,可以使用循环的方式计算出阶乘。由于阶乘的结果往往非常大,需要使用高精度计算库decimal来实现。

import decimal

def factorial(n):
    if n==0:
        return 1
    else:
        return n*factorial(n-1)

def factorial_decimal(n):
    if n==0:
        return 1
    else:
        return n*factorial_decimal(n-1)

decimal.getcontext().prec = 100

n = int(input())
result = factorial(n)
result_decimal = decimal.Decimal(factorial_decimal(n))

print(result)
print(result_decimal)

孪生素数

需求:找出1-1000之间的所有孪生素数。

示例:

输出:

(3, 5)
(5, 7)
(11, 13)
(17, 19)
(29, 31)
(41, 43)
(59, 61)
(71, 73)
(101, 103)
(107, 109)
(137, 139)
(149, 151)
(179, 181)
(191, 193)
(197, 199)
(227, 229)
(239, 241)
(269, 271)
(281, 283)
(311, 313)
(347, 349)
(419, 421)
(431, 433)
(461, 463)
(521, 523)
(569, 571)
(599, 601)
(617, 619)
(641, 643)
(659, 661)
(809, 811)
(821, 823)
(827, 829)
(857, 859)
(881, 883)

解析:

孪生素数是相邻两个素数的差为2的素数对,可以通过判断相邻的两个数是否都为素数来实现。使用is_prime函数判断一个数是否为素数。由于算法的时间复杂度比较高,需要使用筛法来优化。

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5)+1):
        if n%i == 0:
            return False
    return True

def prime_twins():
    primes = [True] * 1000
    primes[0], primes[1] = False, False
    for i in range(2, int(1000**0.5)+1):
        if primes[i]:
            for j in range(i*i, 1000, i):
                primes[j] = False
    for i in range(2, 979):
        if primes[i] and primes[i+2]:
            print((i, i+2))

prime_twins()

6174问题详解

需求:输入一个四位数,求经历过多少次“升序排列”和“降序排列”后最终得到的差为6174。(在每次排列时,如果排列后的数字不足4位,则在左边补0)

示例:

输入:3895

输出:3

解析:

我们可以根据6174的特点,即无论如何排列四位数,最多需要七次操作即可得到6174的结果,推论出每次操作都会使结果的差值缩小到原来的1/9,最终缩小到6174。因此我们可以通过模拟每次操作的过程,统计操作的次数。

def sort_num(n):
    nums = [int(digit) for digit in str(n)]
    nums.sort()
    return nums

def reverse_num(n):
    nums = [int(digit) for digit in str(n)]
    nums.sort(reverse=True)
    return nums

def get_difference(n1, n2):
    return int(''.join([str(digit) for digit in n1])) - int(''.join([str(digit) for digit in n2]))

def k6134(num):
    count = 0
    while True:
        nums1 = sort_num(num)
        nums2 = reverse_num(num)
        diff = get_difference(nums2, nums1)
        if diff == 6174:
            return count
        count += 1
        num = diff
    return count

n = int(input())
print(k6134(n))

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python API 自动化实战详解(纯代码)

    Python API 自动化实战详解(纯代码)攻略 什么是API自动化? API自动化是指利用API进行自动化测试,提高测试效率和质量。通过代码对API接口进行测试,可以自动化执行多个测试用例,获取接口响应数据,判断和验证接口的正确性和稳定性等。 如何进行Python API自动化? Python是一种广泛应用于Web开发和测试的动态编程语言,有着丰富的AP…

    python 2023年5月19日
    00
  • 在django项目中导出数据到excel文件并实现下载的功能

    下面是在Django项目中导出数据到Excel文件并实现下载的功能的完整实例教程: 步骤一:安装依赖库 使用pip命令安装以下库: pandas: 用于操作数据 openpyxl: 用于操作Excel文件 django-forms: 用于创建表单 运行以下命令安装依赖库: pip install pandas openpyxl django-forms 步骤…

    python 2023年5月13日
    00
  • Python要求O(n)复杂度求无序列表中第K的大元素实例

    要求O(n)复杂度求无序列表中第K的大元素,可以使用类似于快速排序的思想,即利用分治的方法来对列表进行划分。具体流程如下: 首先选择列表中的一个元素作为基准值,将列表分为两部分,一部分是小于基准值的元素,另一部分是大于等于基准值的元素。 通过比较基准值的位置与K的大小关系,就可以判断第K大元素位于哪一部分中。如果基准值位于列表的前K个元素中,那么第K大元素位…

    python 2023年5月14日
    00
  • python中如何设置代码自动提示

    当我们在Python中编写程序时,往往需要快速地查找函数或模块的文档,或者在输入函数名称时进行自动完成。这时候一个好的Python代码自动提示工具非常有用。 在Python中,最流行的自动提示工具是Jedi和PyCharm。 下面将分别为你介绍这两种工具的详细使用方法: 一、Jedi Jedi是一个Python解释器库,可以实现自动提示功能。我们可以通过在代…

    python 2023年5月19日
    00
  • 【验证码逆向专栏】数美验证码全家桶逆向分析以及 AST 获取动态参数

    声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联系作者立即删除! 目标 目标:数美全…

    python 2023年5月8日
    00
  • Python中itertools模块的使用教程详解

    让我来详细讲解一下“Python中itertools模块的使用教程详解”。 1. 什么是itertools模块 itertools模块是Python标准库中一个工具模块,提供了一系列用于操作迭代器的工具函数。itertools模块的函数返回都是迭代器,因此也被称为生成器模块。 2. itertools模块提供的常用函数 2.1 itertools.count…

    python 2023年6月3日
    00
  • Python数据处理的六种方式总结

    以下是“Python数据处理的六种方式总结”的完整攻略。 1. Python数据处理的六种方式 Python是一种非常强的数据处理语言,它提供了多种方式来处理数据以下是Python数据处理的六种方式: 1.1表推导式 列表推导式是一种简洁的方式,可以快速地一个列表。它的语法如下: [expression for in iterable if conditio…

    python 2023年5月13日
    00
  • Python 模块和类 – AttributeError:模块没有属性

    【问题标题】:Python Module and Class – AttributeError: module has no attributePython 模块和类 – AttributeError:模块没有属性 【发布时间】:2023-04-06 04:23:01 【问题描述】: 我是 python 新手,我正在尝试创建一个模块和类。 如果我尝试导入my…

    Python开发 2023年4月7日
    00
合作推广
合作推广
分享本页
返回顶部