C的反向跟踪素数的总和?

时间:2018-04-01 10:38:17

标签: c

我想制作一个回溯计划来计算小于n的每个素数之和。你能帮帮我吗?我正在编写代码,但我不知道为什么它不起作用! Thx提前! 我想我做错了什么!

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int v[20],n;
void afisare(int k)
{
    int i;
    for(i=0;i<=k;i++)
    {
        printf("%d",v[i]);
    }
}
int valid(int k)
{
    int i,prim=0;
    for(i=1;i<k;i++)
    {
        if(v[k]%i==0)
        {
            prim++;
        }
    }
    if(prim==2)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
void backtr(int k)
{
    int val;
    for(val=1;val<=n;val++)
    {
        v[k]=val;
        if(valid(k))
        {
            if(k<n-1)
            {
                afisare(k);
            }
            else
            {
                backtr(k+1);
            }
        }
    }
}
int main()
{
    int n;
    printf("n=");
    scanf("%d",&n);
    backtr(1);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

有点晚了,但我希望能帮助别人

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int verify(int s) {
    if (s == 0) 
        return 0;
    else if (s == 1) 
        return 1;
    else 
        int z = 0;
        int i = 1;
        while (i <= s) {
            if (s % i == 0) 
                z++;
            i++;
        }
        if (z == 2) 
            return s;
        else 
            return 0;
}

int backback(int n, int s, int *sum) {
    if (s == n) {
        return;
    }
    int z = verify(s);
    *sum = *sum + z;
    backback(n, s + 1, sum);
    return *sum;
}

int back(int n) {
    if (n <= 0) 
        return 0;
    else if (n == 1) 
        return 1;
    else 
        int sum = 0;
        int x = backback(n, 0, &sum);
        return x;
}

int main(void) {
    int n;
    printf("Insert an integer number: \t");
    scanf("%d", &n);
    int x = back(n);

    if (x == 0) 
        printf("\nInvalid number");
    else if (x == 1) 
        printf("\nThe sum of prime numbers of the number %d is: \t%d", n, x);

    else 
        printf("\nThe sum of prime numbers of the number %d is: \t%d", n, x);

    return 0;
}