0

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

对于输入 1 和 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();
}

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

4

1 回答 1

1

我觉得我发现了你的问题。您的算法是正确的,但是您有两个多余printf的 s。

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);
    }
}
于 2013-09-23T01:40:44.363 回答