关于C语言的简单问题

一个偶数可以分解为两个素数之和。输入一个1~100之间的偶数,存储到int型变量a中。找到两个素数分别存储在int型变量b和c中,使得a=b+c。1不是素数;只要找到一组符合要求的值即可。
怎么写一个简单易懂的程序,最好有注释

这个程序中,首先定义了一个辅助函数isPrime用于判断一个数是否为素数。然后在main函数中,首先获取用户输入的偶数存储在变量a中。接下来使用循环遍历可能的素数b,并判断是否存在素数c,使得a=b+c。一旦找到符合条件的素数,就将其存储在变量b和c中,并跳出循环。最后,输出结果a=b+c。
程序会根据用户输入的偶数,找到满足条件的素数分解并进行输出。注意,程序中只要找到一组符合要求的值即可,可能存在多个解。


#include <stdio.h>

// 判断一个数是否为素数
int isPrime(int number) {
    // 1不是素数
    if (number == 1) {
        return 0;
    }

    // 判断是否有其他因子
    for (int i = 2; i <= number / 2; i++) {
        if (number % i == 0) {
            return 0;
        }
    }

    return 1;
}

int main() {
    int a;  // 存储偶数
    int b, c;  // 存储素数

    printf("请输入一个1~100之间的偶数:");
    scanf("%d", &a);

    // 遍历可能的素数b
    for (b = 2; b <= a / 2; b++) {
        // 如果b是素数,并且a-b也是素数,则满足条件
        if (isPrime(b) && isPrime(a - b)) {
            c = a - b;
            break;
        }
    }

    // 输出结果
    printf("%d = %d + %d\n", a, b, c);

    return 0;
}

img


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

// 判断一个数是否为素数
int isPrime(int num) {
    if (num <= 1) {
        return 0;
    }

    if (num == 2) {
        return 1;
    }

    if (num % 2 == 0) {
        return 0;
    }

    for (int i = 3; i <= sqrt(num); i += 2) {
        if (num % i == 0) {
            return 0;
        }
    }

    return 1;
}

int main() {
    int a, b, c;
    printf("输入一个1~100之间的偶数:");
    scanf("%d", &a);

    // 寻找两个素数之和等于a的情况
    for (int i = 2; i <= a / 2; i++) {
        if (isPrime(i) && isPrime(a - i)) {
            b = i;
            c = a - i;
            break;
        }
    }

    printf("%d = %d + %d\n", a, b, c);

    return 0;
}

供参考:

#include <stdio.h>
int  isPrime(int n)  // 素数判断函数,是素数返回 1 ,反之返回 0
{
    int i;
    if (n < 4)  return n > 1;
    for (i = 2; i * i <= n; i++)
        if (n % i == 0) return 0;
    return 1;
}
int main()
{
    int i, n;
    while (scanf("%d", &n) == 1 && n > 0) // 输入n <= 0 时,结束输入
    {
        if (n % 2 != 0) continue;      // 判断是否是偶数,不是偶数重新输入
        for (i = 2; i <= n / 2; i++) {
            if (isPrime(i) && isPrime(n - i)) // 找到两个素数和
            {
                printf("%-d=%-d+%-d\n", n, i, n - i);//输出
                break;
            }
        }
    }
    return 0;
}

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7786284
  • 这篇博客你也可以参考下:考研数据结构之数组(5.6)——练习题之假设稀疏矩阵A和B都采用三元组表示,编写一个函数计算C=A+B,要求C也用三元组表示(C表示)
  • 除此之外, 这篇博客: 输入三个int型的数据,放入到a,b,c三个变量中去,使用条件结构与交换逻辑将这三个变量中的值从小到大排列。中的 1. 方式一 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  package com.qfen.kz_test1;
    
    import java.util.Scanner;
    
    public class Test1 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
        	//11
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = scanner.nextInt();
            int temp;
            if (a > b && a > c) {
                if (b > c) {//a最大  b第二   
                    temp = a;
                    a = c;
                    c = temp;
                    System.out.println("从小到大:" + a + "<" + b + "<" + c);
                } else {//a最大 b最小 c第二
                    temp = a;
                    a = b;
                    b = c;
                    c = temp;
                    System.out.println("从小到大:" + a + "<" + b + "<" + c);
                }
            } else if (b > a && b > c) {
                if (a > c) { //c   a   b
                    temp = b;
                    b = a;
                    a = c;
                    c = temp;
                    System.out.println("从小到大:" + a + "<" + b + "<" + c);
                } else { // a  c  b
                    temp = b;
                    b = c;
                    c = temp;
                    System.out.println("从小到大:" + a + "<" + b + "<" + c);
                }
            } else if (c > b && c > a) {
                if (b > a) { //a b c 
                    System.out.println("从小到大:" + a + "<" + b + "<" + c);
                } else {
                    // b a c
                    temp = a;
                    a = b;
                    b = temp;
                    System.out.println("从小到大:" + a + "<" + b + "<" + c);
                }
            }
    
        }
    
    }
    
    
  • 以下回答由chatgpt基于相关博客总结生成:
    #include <stdio.h>
    
    // 判断素数函数
    int isPrime(int n) {
        if (n <= 1) {
            return 0; // 不是素数
        }
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                return 0; // 不是素数
            }
        }
        return 1; // 是素数
    }
    
    int main() {
        int even = 0; // 存储输入的偶数
        int flag = 0; // 控制程序结束的标志
        while (1) {
            printf("请输入1到100之间的偶数:");
            scanf("%d", &even);
            if (even < 1 || even > 100) {
                printf("输入错误,请重新输入!\n");
                continue; // 跳过本次循环,开始下一次循环
            }
            if (even % 2 != 0) {
                printf("输入错误,请重新输入!\n");
                continue; // 跳过本次循环,开始下一次循环
            }
            break; // 输入符合要求,结束循环
        }
        // 找出两个素数的和等于输入的偶数
        for (int i = 2; i <= even / 2; i++) {
            if (isPrime(i) && isPrime(even - i)) { // 判断两个数是否为素数
                printf("%d + %d = %d\n", i, even - i, even);
                flag = 1; // 标志已找到符合条件的数,程序不用在继续执行
                break; // 退出循环
            }
        }
        if (flag == 0) { // 在循环中没有找到符合条件的数
            printf("没有找到符合条件的数!\n");
        }
        return 0;
    }
    
#include <stdio.h>

// 判断一个数是否为素数
int isPrime(int num) {
    if (num < 2)
        return 0;
    for (int i = 2; i <= num/2; i++) {
        if (num % i == 0)
            return 0;
    }
    return 1;
}

int main() {
    int a; // 存储输入的偶数
    int b, c; // 存储素数

    printf("请输入一个1~100之间的偶数: ");
    scanf("%d", &a);

    for (b = 2; b <= a/2; b++) {
        c = a - b;
        if (isPrime(b) && isPrime(c)) {
            printf("%d = %d + %d\n", a, b, c);
            break;
        }
    }

    return 0;
}

程序的核心思路是通过循环遍历从2到偶数的一半之间的所有数,判断其是否为素数,并找到与之配对的素数,使得它们的和等于给定的偶数。函数isPrime()用于判断一个数是否为素数,主函数main()用于接收用户输入的偶数并进行处理。