Functional programming 查找最小m>;使得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

首先,我几乎是一个全新的函数式编程(以及一般的编程),所以如果这是一个愚蠢的问题,我会提前道歉。无论如何,我一直在做一些编程练习,到目前为止做得很好,但这一次让我陷入困境:

我需要做一个函数,fn:int->int,对于n>0,它会找到最小的m>n,这样m和n就不是相对素数。 这就是我迄今为止所做的:

(* 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... *)