• hdu 2098 分拆素数和


    题目

    不知道为何,总是把一个问题想得那么复杂,这个复杂不是思维上的复杂,就是说一个问题本来两步就可以走完的,但是我非要花五六步来走,总觉得这样逻辑上会比较清晰。

    结果,还不一定对。。。。

    这道题,我开始想的是,把0到10000内的所有,偶数和素数记录下来,然后去算组成偶数的素数有几对,意味着每一个偶数都要去便利

    下面是仿照着别人的代码:

    只是注释的地方不是很了解,为什么可以不用加这句话

    据我,看来,这应该是用了埃式筛选法

    #include<stdio.h>
    #include<math.h>
    int sushu(int n)
    {
    	int i;
    	if(n==2) return 1;
    	if(n%2==0) return 0;
    	for(i = 3;i<=sqrt(n);i+=2)
    		if(n%i==0)//&&n!=i
    			return 0;
    	return 1;
    }
    int main()
    {
    	int n;
    	while(~scanf("%d",&n),n)
    	{
    		int i ;
    		int cnt = 0;
    		for(i=2;i<=n/2;i++)
    		{
    			if(i!=(n-i))
    				if(sushu(i)==1&&sushu(n-i)==1)
    					cnt++;
    		}
    		printf("%d
    ",cnt);
    	}
    	return 0;
    }
    #include <cstdio>
    #include <cmath>
    
    int  prime[10010];
    int p[10010];
    
    
    int sieve(int n)
    {
        for(int i=0;i<=n;i++)
            prime[i]=1;
        prime[0]=prime[1]=0;
        int cnt = 0;
        for(int i=2;i<=n;i++)
        {
              if(prime[i])
              {
                  p[cnt]=i;
                  cnt++;
                  for(int j=i*2;j<=n;j+=i)
                    prime[j]=0;
              }
        }
        return cnt;
    }
    int main()
    {
        int n;
        sieve(10000);
        while(~scanf("%d",&n),n)
        {
            int i ;
    		int cnt = 0;
    		for(i=2;i<=n/2;i++)
    		{
    			if(i!=(n-i))
    				if(prime[i]==1&&prime[n-i]==1)
    					cnt++;
    		}
    		printf("%d
    ",cnt);
        }
    
        return 0;
    }
    
  • 相关阅读:
    Codevs 4633 [Mz]树链剖分练习
    Codevs 2460 == BZOJ 1036 树的统计
    洛谷 P1038 神经网络
    POJ 1062 昂贵的聘礼
    POJ 1459 Power Network
    POJ 1149 PIGS
    Codevs 1993 草地排水
    指针与引用
    江哥的DP题(G)
    江哥的DP题(F)
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160277.html
Copyright © 2020-2023  润新知