所以我认为我解决了这个问题,但过了一段时间我意识到我的所有代码都是,确保所有输入都是素数,并且前3个输入小于4。反之亦然如果它是从较大到较小的素数序列,那么我如何正确地确保我的所有4个素数都是连续的?素数越高,每个素数之间的差距越大。所以我在这里很难过。还有标志++来检查所有4个输入是否为素数。如果所有4都是素数,那么我的函数返回TRUE。
if(input2 > input1) //This is to know if the sequence is going up or going down, in this case, it's up
while (x <= input4) { //Creates all prime numbers while X is lesser than or equal to input4
while (isprime(x) == 0)
x++;
if (isprime(x)) { //If x is a prime number, we check if it's one of the inputs, if all 4 inputs are consecutive prime integers, then flag will be 4 after the loop, and we'll know that it's a prime sequence
if (x == input1)
flag++;
if (x == input2)
flag++;
if (x == input3)
flag++;
if (x == input4)
flag++;
}
x++;
}
答案 0 :(得分:0)
我要让函数从input1开始,如果下一个素数不是输入2,我会立即返回0,如果下一个素数是输入2,则重复该过程直到INPUT4。感谢有关Erastothenes Sieve的反馈,但我不允许使用阵列,而Eratothenes'Sieve需要它。所以我会实现我的想法。对于任何因为他们有相同问题而使用谷歌搜索的人,你可以这样做。
y = 0, x = input1; //This
if(input2 > input1) //This is to know if the sequence is going up or going down, in this case, it's up
while (x <= input4) { //Creates all prime numbers while X is lesser than or equal to input4
while (isprime(x) == 0)
x++;
if (isprime(x))
y++;
if (isprime(x)) { //If x is a prime number, we check if it's one of the inputs, if all 4 inputs are consecutive prime integers, then flag will be 4 after the loop, and we'll know that it's a prime sequence
//If y is equal to 1, that means that the prime number found is the next input
if (x == input1 && y == 1) {
flag++;
y = 0;
}
if (x == input2 && y == 1) {
flag++;
y = 0;
}
if (x == input3 && y == 1) {
flag++;
y = 0;
}
if (x == input4 && y == 1) {
flag++;
y = 0;
}
}
x++;
}
答案 1 :(得分:0)
您可能对Wilson's theorem感兴趣,其中说明了
对于候选素数n,当且仅当((n-1)!+ 1)mod n = 0时,n为素数
虽然我意识到您要求使用C语言提供解决方案,但由于“大数字”的广泛多样性,这种解决方案并不容易供应。包等等,可以选择。但是,为了证明这个定理的实现是可能的(并且在给予足够的语言支持的情况下并不困难),我将指出在Clojure(Java VM的Lisp变体)中,这可以实现为
(defn is-prime [n]
(= (mod (+' (apply *' (range 2 n)) 1) n) 0))
此处不需要数组作为&#34; primeness&#34;在不知道任何其他素数的值的情况下,可以直接确定任何数字。 需要计算潜在大数的因子,因此需要计算一个大数字&#34;数学包可能非常有用,但它确实允许直接确定任何给定数字是否为素数,因此通过迭代从最低值输入到最高值输入的所有数字,它将允许您确定是否存在任何中间质数。
祝你好运。
答案 2 :(得分:0)
你怎么吃大象? One bite at a time。我们需要将这个问题分解为一系列小步骤。从那里开始,这很容易。
我没有向您展示任何代码,而是希望为您列出算法的要点。一些评论表明,最好的方法是使用数组来制作筛子。
我认为应该使用数组,但不一定要创建筛子。相反,要处理用户输入的值。但是,根据老师的荒谬要求,我们不允许使用阵列。这很好 - 这意味着我们的算法可以处理任意数量的输入。这是相当短视的,但很好。
以下是步骤(听起来有些步骤已经解决了。)
我希望在此计划中看到一些功能:
bool isPrime(int value);
int nextPrime(int startingPrime);
因此,在按顺序对值进行排序后,您会看到类似......
的内容isPrime(value1) && value2 == nextPrime(value1) && value3 == nextPrime(value2) && value4 == nextPrime(value3)