gpt4 book ai didi

c - 在 Turbo C 中使用链表和递归的素数

转载 作者:行者123 更新时间:2023-11-30 15:45:34 30 4
gpt4 key购买 nike

我试图将一些链接列表添加到我的递归素数代码中,我能够使用链接列表存储值,然后当我要检索两个输入数字之间的素数时,我得到了这个结果。

for input 1 and 5: 1, 21, 301, 5

输出应该是:

2, 3, 5

代码是:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

struct node
{
//struct node *prev;
int num;
struct node *nxt;
}*head;

void store(int value){
struct node *var, *temp;
var = (struct node *)malloc(sizeof(struct node));
var->num = value;
if(head==NULL){
head = var;
head->nxt = NULL;
}else{
temp = var;
temp->nxt = head;
head=temp;
}
}

void accept(int value, int i){
if(i<2){
printf("Enter value: ");
scanf("%d", &value);
store(value);
i++;
accept(value,i);
}
}

void prime(){
int num,x,y;
struct node *temp,*temp2,*var;
temp = head;
temp2 = temp->nxt;
y = temp->num;
x = temp2->num;
primeloop(x,y);
}

int primeloop(int x,int y){
int num;
if ( x == 1 ) x++;
if(x <= y){
num = isPrime(x,2); // second input parameter added
printf("%d",num);
if(num == 0){
printf("");
}else{
printf("%5d",x);
}
primeloop(x+1,y);
}
}

int isPrime(int n, int i){
if(n%i==0 && n!=2 && n!=i){
return(0);
} else {
if (i < sqrt(n)) {
return( isPrime(n,i+1) );
} else
return(1);
}
}

void main(){
int i,value;
clrscr();
i = 0;
accept(value,i);
prime();
getch();
}

我必须更改一些行才能使其与链接列表一起使用,因为算法仍然相同,所以我可能会在这里遗漏一些内容。请指出我做错了什么。

最佳答案

我想我发现了你的问题。您的算法是正确的,但您有两个冗余的 printf

你的primeloop应该是这样的

int primeloop(int x,int y){
int num;
if ( x == 1 ) x++;
if(x <= y){
num = isPrime(x,2); // second input parameter added
if(num != 0){
printf("%5d ",x);
}
primeloop(x+1,y);
}
}

关于c - 在 Turbo C 中使用链表和递归的素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18950532/

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