zoukankan      html  css  js  c++  java
  • poj2909 || poj2262

    #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
    ",cout);
        }
        return 0;
    }
    View Code

    for循环用于产生数对,用i<n/2+1或i<=n/2都可以避免产生重复的数对

    在判断素数的时候采用小学生做法:从2到sqrt(n),i=2,i<=n(必须加=)

    如果是2和3,根本不会经过循环

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

    算法描述:小于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

    ar[10000]
    ar[0]=0;
    ar[1]=0;
    for(i=2;i<10000;i++)
    {
        ar[i]=1;
    }
    for(i=2;i<10000;i++)
    {
        if(ar[i] == 1)
        {
            for(j=2;i*j<10000;j++)
            {
                ar[i*j] = 0;
            }
        }
    }
    View Code

    下面的动态图很清楚:

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

  • 相关阅读:
    免费申请域名
    分享学习linux网站
    二分法
    node 解决存储xss风险报告
    cf987f AND Graph
    loj2587 「APIO2018」铁人两项
    luogu3830 [SHOI2012]随机树
    luogu3343 [ZJOI2015]地震后的幻想乡
    bzoj2560 串珠子
    luogu3317 [SDOI2014]重建
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4586276.html
Copyright © 2011-2022 走看看