发布网友 发布时间: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]);
}