鱼C论坛

 找回密码
 立即注册
查看: 1158|回复: 8

[已解决]做题的时候遇到个问题

[复制链接]
发表于 2018-7-24 20:42:43 | 显示全部楼层 |阅读模式

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

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

x
题目:求十位、个位 都是质数 组成的质数。

  1. import math

  2. for number in range(10,100):
  3.         m = int(number / 10)
  4.         n = int(number % 10)
  5.         m_f,n_f,number_f = 0,0,0

  6.         for i in range(2,int(math.sqrt(m))+1):
  7.                 if m % i == 0 or m== 1:
  8.                         m_f = 1
  9.                         break
  10.         if m_f != 1 :
  11.                 for i in range(2,int(math.sqrt(n))+1):
  12.                         if n % i == 0 or n == 1:
  13.                                 n_f = 1
  14.                                 break
  15.         if m_f != 1 and n_f != 1 :
  16.                 for i in range(2,int(math.sqrt(number)+1)):
  17.                         if number % i == 0:
  18.                                 number_f = 1
  19.                                 break
  20.                 if number_f != 1 :
  21.                                 print(number)
复制代码


输出的结果是
11
13
17
23
31
37
53
71
73
为什么会有包含1的数字啊?
最佳答案
2018-7-24 20:59:07
本帖最后由 无符号整形 于 2018-7-24 21:06 编辑

第19行出了问题

顺便给出简化版
  1. def ispm(num):
  2.       i = num - 1
  3.       while i - 1:
  4.             if(not num % i):
  5.                   return False
  6.             i-=1
  7.       return True

  8. for each in range(10,100):
  9.       if int(str(each)[0]) in [2,3,5,7] and int(str(each)[1]) in [2,3,5,7] and ispm(each):
  10.             print(each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-7-24 20:43:57 | 显示全部楼层
因为1%2=1。(1÷2=0……1)
你应该做一个过滤1的语句。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-24 20:48:28 | 显示全部楼层
无符号整形 发表于 2018-7-24 20:43
因为1%2=1。(1÷2=0……1)
你应该做一个过滤1的语句。

判别里不是有 or m==1 吗,这样在m==1的情况下,m_f应该也是1吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-24 20:49:58 | 显示全部楼层
无符号整形 发表于 2018-7-24 20:46
再说了你这个太复杂了啊。。
这样就ok

膜拜大神!,,我还是新手,学了1礼拜
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 20:51:26 | 显示全部楼层
LeiShen 发表于 2018-7-24 20:49
膜拜大神!,,我还是新手,学了1礼拜

额 那个有问题,1我重写一个,我现在在尝试看懂你的代码。。。太复杂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 20:59:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 无符号整形 于 2018-7-24 21:06 编辑

第19行出了问题

顺便给出简化版
  1. def ispm(num):
  2.       i = num - 1
  3.       while i - 1:
  4.             if(not num % i):
  5.                   return False
  6.             i-=1
  7.       return True

  8. for each in range(10,100):
  9.       if int(str(each)[0]) in [2,3,5,7] and int(str(each)[1]) in [2,3,5,7] and ispm(each):
  10.             print(each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 21:02:41 | 显示全部楼层
额 你怎么还用到了平方根???
实在是看不懂你的代码啊……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-24 21:04:35 | 显示全部楼层
无符号整形 发表于 2018-7-24 21:02
额 你怎么还用到了平方根???
实在是看不懂你的代码啊……

,,,,我就是想让循环的次数少点,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 21:06:14 | 显示全部楼层
本帖最后由 无符号整形 于 2018-7-24 21:07 编辑
LeiShen 发表于 2018-7-24 21:04
,,,,我就是想让循环的次数少点,


好吧,我想我看懂了代码……
原因看6楼~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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