Manchester


私信TA

用户名:wenyajie

访问量:332011

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 65548
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
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);
}

别忘点赞哦-.-

 

0.0分

31 人评分

  评论区

其实可以改成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)工作量更小。
(不是杠精,只是提点建议)
2022-02-18 17:13:23
#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);
	
	}
2022-01-24 15:17:52
什么时候for不用加大括号?
2021-10-13 14:07:13
不会超时吗?
2021-08-19 11:42:01
学到了!谢大佬!
2021-02-02 12:34:29
  • «
  • 1
  • »