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()。和数组不一样,不会覆盖。
  • 相关阅读:
    UVALive 7141 BombX
    CodeForces 722D Generating Sets
    CodeForces 722C Destroying Array
    CodeForces 721D Maxim and Array
    CodeForces 721C Journey
    CodeForces 415D Mashmokh and ACM
    CodeForces 718C Sasha and Array
    CodeForces 635C XOR Equation
    CodeForces 631D Messenger
    田忌赛马问题
  • 原文地址:https://www.cnblogs.com/binanry/p/9652200.html
Copyright © 2011-2022 走看看