解题思路:
1.输入一个数num;

2.让num减去从2到num/2的每一个素数;(1不是素数)

3.判断每一个减得的差,差是素数则成立,coun_t++;

判断素数实现(1)

int judge_sushu( int n )
{
    int i;

    for ( i = 2; i < n; i++ )
        if ( n % i == 0 )
            break;

    if ( i == n )
        return(1);
    else
        return(0);
}

改进实现(2)

int judge_sushu( int n ) //只判断2到根号n中,是否有元素是n的因子
{
    int    i;
    float    s = sqrt( n ); 

    for ( i = 2; i <= s; i++ )
        if ( n % i == 0 )
            return(0);

    return(1);
}

参考代码:

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

int judge_sushu( int n );

int main()
{
    int num, coun_t;

    while ( scanf( "%d", &num ) != EOF )
    {
        coun_t = 0;
        for ( int i = 2; i <= num / 2; i++ )
            if ( judge_sushu( i ) )
            {
                if ( judge_sushu( num - i ) )
                    coun_t++;
            }
        printf( "%d\n", coun_t );
    }
}


/*--------------------------------------------------*/
int judge_sushu( int n )
{
    int    i;
    float    s = sqrt( n );

    for ( i = 2; i <= s; i++ )
        if ( n % i == 0 )
            return(0);

    return(1);
}

别忘点赞哦-.-

点赞(19)
 

0.0分

21 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 6 条评论

Sapphire 2年前 回复TA
其实可以改成for(int i=3;i<=n/2;i+=2),直接从3开始遍历,然后i+=2,这样占用内存更小,为什么可以这样改呢?
因为i绝不可能等于2,题目要求我们输入一个偶数,偶数要么等于奇数+奇数,要么等于偶数+偶数,然而素数里只有2为偶数,如果i等于2的话,那么另一个数也要是偶数才行,但是这根本做不到,所以改成for(int i=3;i<=n/2;i+=2)工作量更小。
(不是杠精,只是提点建议)
微醺 3年前 回复TA
#include<stdio.h>
int main(){
	int prime[33000];
	int Isprime[33000];
	int n,k=0,t=0;
	scanf("%d",&n);
	prime[0]=prime[1]=1;
	for(int i=2;i<n;i++)
	if(prime[i]==0){
		for(int j=2;j*i<n;j++){
			prime[i*j]=1;
		}
	}
	for(int i=0;i<n;i++){
		if(prime[i]==0){
			Isprime[t]=i;
			t++;
		}
	}

	for(int i=0;i<=t;i++)
	for(int j=0;j<=t;j++){
		if(Isprime[i]+Isprime[j]==n)k++;
	}
	if(prime[n/2]==0)printf("%d",k/2+1);
	else printf("%d",k/2);
	
	}
梦魔 3年前 回复TA
什么时候for不用加大括号?
编程界的小白 3年前 回复TA
@编程界的小白 怪不得,我双层循环的(丢脸)
编程界的小白 3年前 回复TA
不会超时吗?
花露水和暖壶 3年前 回复TA
学到了!谢大佬!