gpt4 book ai didi

c - 检查一个数是否可​​以表示为两个素数之和的程序

转载 作者:行者123 更新时间:2023-11-30 21:14:39 26 4
gpt4 key购买 nike

我编写了以下程序来检查给定的数字是否可以表示为两个素数之和。它编译得很好,但没有按预期工作。例如,对于输入 = 16,它显示 16 不能表示为两个素数之和。另外,例如,输入 = 5,它显示 5 = 3 + 2,而不是 5 = 2 + 3。

/* Program to check whether a number can be expressed as a sum of two prime numbers*/
#include <stdio.h>
#include <stdlib.h>

int prime(int x)
{
int fact=0,i;
for(i=2;i<x;i++)
{
if(x%i==0)
{
fact++;
break;
}
}
if (fact==0)
return 1;
else return 0;
}
int main()
{
int a,b,c,d,count=0;
printf("Enter Number\n");
scanf("%d",&a);
for(b=2;b<(a+1)/2;b++);
{
c = prime(b);
d = prime(a-b);
if (c==1 && d==1)
{
printf("%d = %d + %d\n",a,b,a-b);
count++;
}
}
if(count==0)
{
printf("%d cannot be expressed as sum of two prime numbers.\n",a);
}
return 0;
}

最佳答案

您的代码中有两个错误:

在函数 prime() 中,您不会检查 x2 的值,该值也可能是素数。

第二个错误是for语句后面的;

for(b=2;b<(a+1)/2;b++);

删除它,否则后面的 block ({}之间的部分)不会在每次循环迭代时执行,而是在循环结束后执行。

一般来说,您不想读取 float ,而是想要读取整数。将 fgets()atoi() 用于您的用例。这些比 scanf() 安全得多。

最后一点:在运算符之前和之后添加空格。这使得代码更具可读性。

完整代码

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

int prime(int x)
{
int i;

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

for (i = 2; i < x; i++)
{
if (x % i == 0)
{
return 0;
}
}

return 1;
}

int main()
{
int read_number;
int summand1;
int summand2;
int count = 0;
int max;
char buffer[100];

printf("Enter Number\n");
fgets(buffer, sizeof(buffer), stdin);
read_number = atoi(buffer);

max = (read_number + 1) / 2;

for (summand1 = 2; summand1 < max; ++summand1)
{
summand2 = read_number - summand1;
if ((prime(summand1) == 1) && (prime(summand2) == 1))
{
printf("%d = %d + %d\n", read_number, summand1, summand2);
count++;
}
}

if (count == 0)
{
printf("%d cannot be expressed as sum of two prime numbers.\n", read_number);
}

return 0;
}

当然你可以做一些优化。例如在 prime() 中:如果您已经检查过,x 不是 2 的倍数,则可以使用 开始循环>3 并在每次迭代中将 i 增加 2。或者,如果 i 大于 x 的平方根,您可以停止此循环。这些措施可能会加快大量代码的速度,但可能会降低代码的可读性。这是您必须考虑的权衡,尤其是当您开始学习编程时。

关于c - 检查一个数是否可​​以表示为两个素数之和的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52191799/

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