首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >素数C和中的BackTracking?

素数C和中的BackTracking?
EN

Stack Overflow用户
提问于 2018-04-01 18:38:17
回答 1查看 176关注 0票数 1

我想做一个回溯程序来计算每个小于n的素数的和。你能帮我做吗?我正在写一个代码,但是我不知道为什么它不能工作!提前谢谢你!我想我做错了什么!

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2020-08-03 18:31:58

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

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49597181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档