鱼C论坛

 找回密码
 立即注册
查看: 3146|回复: 10

[技术交流] 小练习 20170501 找出非梅森素数28433 × 2^7830457 + 1的最后十位

[复制链接]
发表于 2017-5-1 15:21:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2017-5-8 14:38 编辑

从现在开始我们要开展一批欧拉计划的习题练习。
其实在我们论坛中已有欧拉计划的板块,可能有些鱼油还没注意到。
什么是欧拉计划:http://bbs.fishc.com/thread-60405-1-1.html
我们欧拉板块现已给出了200余题,这批练习将从欧拉计划中选题。其实用python语言完成有很多的优势,可以更简洁更方便的实现。
如果大家有兴趣也可浏览欧拉的英文网站:https://projecteuler.net/archives
这里已经有了500余题。


                               
登录/注册后可看大图


题目要求:
以python语言完成,如果是python2请注明。
程序以代码文字格式发帖。
注重程序效率和创意。
答题在一周内完成,即5.8 10:00之前,其后将公开大家的答案,并评比成绩。

另程序和答案可以在网上搜到,希望大家独立完成。题目不难,大家看看谁的效率高。

----回帖需写明解题思路,鼓励在程序中加上注释


一些鱼油反映题目有些过难,为此略过一部分偏难的题目。





题目:

第一个超过一百万位的素数是在 1999 年发现的,并且是一个梅森素数:

                               
登录/注册后可看大图
;它包含 2,098,960 位。之后包含更多位的,形如

                               
登录/注册后可看大图
的梅森素数被陆续发现。

但是在 2004 年人们发现了一个巨大的包含 2,357,207 位的非梅森素数:

                               
登录/注册后可看大图


找出这个素数的最后十位。





本帖被以下淘专辑推荐:

  • · |主题: 1, 订阅: 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-1 15:43:31 | 显示全部楼层
没看懂题目,百度也看不懂。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-1 17:20:04 From FishC Mobile | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-5-2 17:15 编辑

一行代码输出:
print(28433*pow(2, 7830457, 10**10) +1)%10**10
8739992577

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-2 10:20:10 | 显示全部楼层
#!/usr/bin/env python
# coding=utf-8
# python 2.7
# 指数7830457,10000切片分别计算
p = 7830457
n = 10000
a = p%n
b = p/n
c = int(str(2**n)[-10:])
d = int(str(c**b)[-10:])
e = int(str(2**a)[-10:])
f = int(str(d*e)[-10:])
g = int(str(28433*f)[-10:])+1
print g
8739992577
[Finished in 0.0s]

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-2 10:55:15 | 显示全部楼层
我也只会这样了
x=1
for i in range(7830457):
    x*=2
    if x>10**10:x=x%(10**10)

print((x*28433+1)%10**10)

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-2 18:03:01 | 显示全部楼层
x = 28433 * pow(2, 7830457) + 1
print(x % (pow(10, 10)))
我理解错题目了?
8739992577

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-2 21:45:59 | 显示全部楼层
本帖最后由 小剑剑 于 2017-5-2 21:48 编辑

刚好学了信安数学,啥不学就学求mod  本题就可以看成是对10**10求mod
用一下模重复平方计算
def func(mo,inde,orgin,ba,an):
       inde=bin(inde)[2:]
       ba=ba%mo
       orgin=orgin%mo
       for i in range(-1,-len(inde)-1,-1):
              if int(inde[i]):
                     orgin=(orgin*ba)%mo
              ba=ba**2%mo
       orgin=(orgin+an)%mo
       return orgin


print(func(10**10,7830457,28433,2,1))


结果 8739992577

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-5 11:21:29 | 显示全部楼层
a = 1+28433*2**7830457
b = str(a)
print(b[-10:])

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-7 05:23:32 | 显示全部楼层
print ((28433 * pow(2, 7830457, 10**10) + 1) % 10 ** 10)

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-7 21:12:18 | 显示全部楼层
(28433*2**7830457+1)%10**10
答案 8739992577

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
冬雪雪冬 + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 09:41:02 | 显示全部楼层
n = 7830457
a = 28433
i = 0
while i <= n:
    a *= 2
    i += 1
    while a > 10**10:
        a = a % (10**10)

print(a + 1)
结果是7479985153
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表