zoukankan      html  css  js  c++  java
  • 1294: 拆分素数

    题目描述

    老师给ellen出了一道难题,老师随机在0到10000之间抽出一个数n,让ellen计算有多少种情况满足a+b=n,并且a,b都是素数。Ellen很痛苦,你来帮帮他吧?

    输入

    输入一个0-10000之间的数

    输出

    输出满足上述要求的个数;

    样例输入

    0
    10000
    6335
    
    

    样例输出

    0
    127
    0
    

     

    #include<iostream>
    #include<vector>
    using namespace std;
    bool isprime(int n)
    {
        if (n <2)return false;
        for (int i = 2; i *i<= n; i++)
        {
            if (n%i == 0)
                return false;
        }
        return true;
    }
    int main()
    {
        int n;
        vector<int >v;
        while (cin >> n)
        {
            int cnt = 0;
            for (int i = 0; i < n; i++)
            {
                if (isprime(i))
                {
                    v.push_back(i);//素数打表
                }
            }
            /*for (vector<int >::iterator it = v.begin(); it!=v.end(); it++)
            {
            cout << *it;
            cout << " ";
            }*/
            /*vector<int>::iterator  it1 = v.begin();
            vector<int>::iterator  it2 = v.end();
            while (it1 != it2)
            {
                if (*(it1)+*(it2) == n)
                {
                     cnt++;
                     --it2;
                     ++it1;
                }
                else if (*(it1)+*it2> n)
                {
                    --it2;
                }
                else
                {
                    ++it1;
                }
            }*/
            int a = 0, b = v.size() - 1;//主要的思想是有序,然后two point,和二分查找相似。
            while (a < b)
            {
            if (v[a] + v[b] == n)
            {
            cnt++;
            b--;
            a++;
            }
            else if (v[a] + v[b]>n)
            {
            b--;
            }
            else
            {
            a++;
            }
            }
            cout << cnt << endl;
            v.clear();
        }
        //system("pause");
        return 0;
    }
    注意那个vector要v.clear()。和数组不一样,不会覆盖。
  • 相关阅读:
    函数配接器
    函数对象和函数指针
    unary_function 和 binary_function
    堆排序
    Shell排序
    volatile理解
    死锁
    进程间通信
    优化循环的方法-循环展开
    如何学习编译原理
  • 原文地址:https://www.cnblogs.com/binanry/p/9652200.html
Copyright © 2011-2022 走看看