首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >haskell列表理解(数论问题)

haskell列表理解(数论问题)
EN

Stack Overflow用户
提问于 2011-05-23 17:05:20
回答 3查看 572关注 0票数 5

我在haskell尝试解决了以下问题:

求最小数b与(a^b mod 100) =1,对于每a与gcd(a,100)=1

我试过这个:

代码语言:javascript
复制
head[ b | a <- [1..], b <- [1..], (a^b `mod` 100) == 1, gcd a 100 == 1]

但这会产生1^1作为第一个解决方案,这是不正确的,它应该是对每一个;例如,3^1不是一个解决方案。我认为正确的解决方案是b=20,但我想在haskell中找到它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-23 19:26:16

找出最小的b数

代码语言:javascript
复制
find f [1..]

(a^b mod 100) =1(A)

代码语言:javascript
复制
f b = all (\a -> a^b `mod` 100 == 1) xs

A与gcd(a,100)=1

代码语言:javascript
复制
    where xs = [a <- [1..100], gcd a 100 == 1]
票数 2
EN

Stack Overflow用户

发布于 2011-05-23 17:24:45

“为每个a”部分是一个无限集,所以您不应该期望用直接的蛮力解决这个问题。你需要更多的数论。

无论如何,假设一个直接的解决方案是可能的,这里的问题是a <- .,b <- .就是找到所有的a和b值,willy nilly。你需要下一些订单才能得到你想要的东西:

代码语言:javascript
复制
bs = [b | b <- [1..],
         (and [(a `mod` b)==1 | a <- [1..])
     ]

其中,和函数返回列表中的所有元素是否为true。(仍然不能工作,因为a <- [1..]是无限的,这意味着and要么返回False,要么永远返回循环)。

票数 2
EN

Stack Overflow用户

发布于 2011-05-23 19:20:32

据我所知,列表理解以相反的外观顺序迭代每个绑定变量:

代码语言:javascript
复制
[ (x,y) | x <- [0,1], y <- [0,1] ] == [(0,0),(0,1),(1,0),(1,1)]
[ (x,y) | x <- [0,1], y <- [0..] ] == [(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),...]
[ (x,y) | x <- [0..], y <- [0,1] ] == [(0,0),(0,1),(1,0),(1,1),(2,0),(2,1),...]

在无限列表的情况下,会遇到这样的问题。上面的第二个例子展示了无限列表中的一个变量如何阻止另一个变量的变化,但是第三个例子显示,更改顺序可以解决这个问题。

演示当前列表理解是如何在ab中迭代的

代码语言:javascript
复制
[ (a,b) | a <- [1..], b <- [1..] ] == [(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),...]

这个问题类似于第二个例子。我不知道足够的数论,以帮助您进一步有效的解决方案,但这是您的实现的根本问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6100476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档