码迷,mamicode.com
首页 > 其他好文 > 详细

poj2909 || poj2262

时间:2015-06-18 19:12:06      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int isPri(int a, int b)
{
    int i;
    for(i=2; i <= sqrt(a); i++)
    {
        if(a%i == 0)
            return 0;
    }
    for(i=2; i <= sqrt(b); i++)
    {
        if(b%i == 0)
            return 0;
    }
    return 1;
}
int main()
{
    int n,flag,i,cout;
    while(scanf("%d",&n) != EOF && n)
    {
        cout=0;
        for(i=2; i< n/2+1; i++)
        {
            flag=isPri(i,n-i);
            if(flag == 1)
                cout++;
        }
        printf("%d\n",cout);
    }
    return 0;
}
View Code

以后都用《埃拉托斯特尼筛法》打表

算法描述:小于2的不是素数,用一个数组a[10000],元素下标表示这个数,元素的值表示是否是素数,c++做法是,bool a[10000],将a[0]和a[1]赋成0,从2开始,2*2,2*3...

2*6...这些下标对应的元素值全改0,在此环境下再次寻找下一个素数,再一次,3*2,3*3,3*4...乘积整体小于10000

技术分享
    int a[10000];
    a[0]=0;a[1]=0;
    for(i=2;i<10000;i++)
        a[i]=1;
    for(i=2;i<10000;i++)
    {
        if(a[i] == 1)
        {
            for(j=2;j<10000;j++)
            {
                a[i*j] == 0;
            }
        }
    }

for(int j=2;j<=n;++j){  
        if(isPrimes[j]==true)  
            for(int m=2;j*m<=n;++m)isPrimes[j*m] = false;  
View Code

参见:

http://blog.csdn.net/kingwolfofsky/article/details/7199758

poj2909 || poj2262

标签:

原文地址:http://www.cnblogs.com/gabygoole/p/4586276.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!