gpt4 book ai didi

c - 有范围的东西

转载 作者:行者123 更新时间:2023-11-30 19:23:27 25 4
gpt4 key购买 nike

我认为下面这段代码中的全局作用域和局部作用域存在一些问题。如果有人请帮助我,为什么这段代码不起作用!这是一个寻找第 25 个神奇数字的程序。神奇数字意味着除了 2,3,5 之外没有质因数。我从16开始,这是第12个神奇的数字。然后检查这些数字是否可以被 7 中的任何素数整除。所以我在全局数组中列出了素数。并检查数组中那些素数的数字。如果检查完成,程序将尝试使用 next_prime 函数查找下一个素数并将它们列出到全局数组中。但我得到了错误的结果。它总是给出结果 input+=4 这是不期望的。

/*a program to find out 25th magical number. magical number
means it has no prime factor except 2,3,5*/
#include<stdio.h>
#include<math.h>
double primes[10000]={2,3,5};
int serial=3;
double next_prime(double f)//function, when called, returns the next prime number
{
int j=0,loop_breaker=0;
int count;
while(j==0){
for(count=1;primes[count]<sqrt(f)+1 &&count<serial;count++){
if(fmod(f,primes[count])==0){
f+=2;
loop_breaker=1;
break;
}
}
if(loop_breaker==0){
primes[serial]=f;
serial++;
j=1;
}
}
return f;
}
int main()
{
double f=7,prime_divisor,magic_serial=12,magic_number=16;
int c,loop_breaker,is_magic;
prime_divisor=next_prime(f);
f+=2;//this line always comes after the previous line so that everytime the value of f gets changed
while(magic_serial!=25){
is_magic=0;
loop_breaker=0;
for(c=3;c<serial;c++){
if(fmod(magic_number,primes[c])==0){
loop_breaker=1;
break;
}
}
if(loop_breaker==0){
while(prime_divisor<sqrt(magic_number)+1){
prime_divisor=next_prime(f);
f+=2;
if(fmod(magic_number,prime_divisor)==0){
is_magic=1;
break;
}
}
}
if(is_magic==0){
magic_serial++;
}
magic_number++;
}
printf("%lf",magic_number);
return 0;

}

最佳答案

我猜问题出在 next_prime 函数上,也许这个效果更好:

double next_prime()
{
double f = primes[serial-1] + 2;
int count;
for(count=1; primes[count]<=sqrt(f) && count<serial; ++count)
{
if(fmod(f, primes[count])==0)
{
f += 2;
count = 1;
}
}
return primes[serial++] = f;
}

我也认为函数不需要取值,所以我删除了它而且 main 函数似乎没有达到您的预期,所以我认为这个效果更好:

int main()
{
double prime_divisor=next_prime(),magic_serial=12,magic_number=16;
int c, loop_breaker;
while(magic_serial!=25)
{
++magic_number;
loop_breaker = 1;
while(prime_divisor<magic_number/2)
prime_divisor = next_prime();
for(c=3; c<serial; ++c)
{
if(fmod(magic_number, primes[c])==0)
{
loop_breaker = 0;
break;
}
}
if(loop_breaker)
++magic_serial;
}
printf("%lf\n",magic_number);
return 0;
}

我希望这会有所帮助。

关于c - 有范围的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11872644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com