Functional programming 查找最小m>;使得m和n不是相对素数
首先,我几乎是一个全新的函数式编程(以及一般的编程),所以如果这是一个愚蠢的问题,我会提前道歉。无论如何,我一直在做一些编程练习,到目前为止做得很好,但这一次让我陷入困境: 我需要做一个函数,fn:int->int,对于n>0,它会找到最小的m>n,这样m和n就不是相对素数。 这就是我迄今为止所做的:Functional programming 查找最小m>;使得m和n不是相对素数,functional-programming,primes,sml,Functional Programming,Primes,Sml,首先,我几乎是一个全新的函数式编程(以及一般的编程),所以如果这是一个愚蠢的问题,我会提前道歉。无论如何,我一直在做一些编程练习,到目前为止做得很好,但这一次让我陷入困境: 我需要做一个函数,fn:int->int,对于n>0,它会找到最小的m>n,这样m和n就不是相对素数。 这就是我迄今为止所做的: (* returns true if p,q are relative primes, else false *) fun relativePrimes (1,q) = true | re
(* returns true if p,q are relative primes, else false *)
fun relativePrimes (1,q) = true
| relativePrimes (p,q) = if p <> 0 then relativePrimes(q mod p,p) else false;
这里的问题是,这个函数只适用于n要在循环中实现搜索,您需要一个带有循环索引的辅助函数作为附加参数 关于这道数学题,最好的解决办法如下: 求
m
的最小素因子p
,然后让n=m+p
要查找p
,您只需将m
的平方根进行除法运算即可。如果你没有找到一个因子,那么m
是素数,所以p=m
<> P< >在没有小素因子的情况下,有更好的分解大型< <代码> m >代码>的方法,例如这是哥本哈根大学编程入门课程中的一个手工作业。请花时间自己解决这个问题,以便更好地学习。你不仅仅是为了你自己,也是为了所有可能偶然发现它的人。建设性地使用StackOverflow并提出一般性问题——这是非常受鼓励的。
fun nextNotRelativePrime n = if relativePrimes (n,n+1) = false then n+1
else if relativePrimes (n,n+2) = false then n+2 else n*2; (* and so on... *)