...int main() { int n; printf("enter n:\n"); scanf("%d",&n...

发布网友 发布时间:2024-12-07 17:04

我来回答

1个回答

热心网友 时间:2024-12-15 11:57

#include <stdio.h>

bool prime(int n)
{
int i, t = n/2;
for(i=2; i<=t; ++i)
{
if ( n % i == 0 )
return false;
}
return true;
}

void gotbaha(int n)
{
if ( n < 6 || n%2 ) return ;
int i, t=n/2;
for ( i = 2; i <= t; ++i )
{
if( prime(i) && prime(n-i) )
{
printf("%d=%d+%d\n", n, i, n-i);
}
}
}

int main()
{
int n;
printf("enter n\n");
scanf("%d", &n);
gotbaha(n);
}

这个如果n很大的话,会算不出来结果。
这里可以有优化
用筛法把<N的素数求出来
这样可以得到两个数组
bool is_prime[n]; (is_prime[i] 为真的话,表示i是素数)
prime[10000];(这个数组一次存的是 2,3,5,7,11,...)
for(i=0; i<prime_len && prime[i] + prime[i]<= n; ++i )
{
if ( is_prime[ n-prime[i] ])
printf("%d=%d+%d",n, prime[i], n-prime[i]);
}

热心网友 时间:2024-12-15 11:54

#include <stdio.h>

bool prime(int n)
{
int i, t = n/2;
for(i=2; i<=t; ++i)
{
if ( n % i == 0 )
return false;
}
return true;
}

void gotbaha(int n)
{
if ( n < 6 || n%2 ) return ;
int i, t=n/2;
for ( i = 2; i <= t; ++i )
{
if( prime(i) && prime(n-i) )
{
printf("%d=%d+%d\n", n, i, n-i);
}
}
}

int main()
{
int n;
printf("enter n\n");
scanf("%d", &n);
gotbaha(n);
}

这个如果n很大的话,会算不出来结果。
这里可以有优化
用筛法把<N的素数求出来
这样可以得到两个数组
bool is_prime[n]; (is_prime[i] 为真的话,表示i是素数)
prime[10000];(这个数组一次存的是 2,3,5,7,11,...)
for(i=0; i<prime_len && prime[i] + prime[i]<= n; ++i )
{
if ( is_prime[ n-prime[i] ])
printf("%d=%d+%d",n, prime[i], n-prime[i]);
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com