zoukankan      html  css  js  c++  java
  • TX2017秋招笔试题之素数对

    问题描述:

    给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
    如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

    输入描述:
    输入包括一个整数n,(3 ≤ n < 1000)

    输出描述:

    输出对数
    示例1
     
    输入
      10
    输出
      2
    ————————————————————————————————————————————————
    解决思路;
    首先判断素数(在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数:2,3,5,7,11,。。。),不必多讲,
    然后所给范围的素数集合,再求解
    思路一:
    #include<iostream>
    #include<math.h>
    using namespace std;
    
    int IsPrime(int n);
    int main()
    {
        int N;
        cin>>N;
        int *arr=new int[N];
        int j=0;
        int num=0;
        for(int i=2;i<=N;i++){
            if(IsPrime(i))
            {
                arr[j++]=i;
            }
    
        }
        for(int m=0;m<j;m++)
            for(int n=m;n<j;n++)
            {
                if(arr[n]+arr[m]==N)
                    num++;
            }
        cout<<num;
    
        delete arr;
        return 0;
    }
    int IsPrime(int n){
        if(n==1)
            return 0;
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0)
                return 0;
        return 1;
    }

    思路二:

    若N是素数,那么N的倍数就都不是素数了,可以通过这种方法把素数筛选出来

    2是素数,那么就把1-1000范围所有2的倍数置为0,此时v[2]、v[4]、v[6]、v[8]....都为0了;

    下一次看到3是素数,则把v中3的倍数置为0,v[3]、v[6]、v[9]...都置为0;
    下一个素数为5,因为在在第一步时,v[4]被置为0了,接下来把5的倍数都置为0
    ......
    最后,v中素数都为1,非素数都为0

    #include <iostream>
    #include <vector>
    using namespace std;
     
    int main(){
        //筛选法求素数(删除所有素数的倍数)
        vector<int> v(1000,1);
        for(int i=2;i<1000;++i){
            for(int j=2;i*j<1000;++j){
                if(v[i]){
                    v[i*j]=0;
                }
            }
        }
        int x;
        cin>>x;
        int res=0;
        for(int i=2;i<=x/2;++i){
            if(v[i]&&v[x-i]) ++res;
        }
        cout<<res<<endl;   
    }
  • 相关阅读:
    linux 常用命令
    基于 DirectX11 的 MMDViewer 01-简介
    基于 DirectX11 的 MMDViewer 04-渲染目标视图和多视口
    基于 DirectX11 的 MMDViewer 03-渲染管线
    基于 DirectX11 的 MMDViewer 02-创建一个窗口
    Simple2D-26 Simple2D 最后的工作,开发结束
    Simple2D-25 精灵动作
    Simple2D-24 Sprite 渲染树
    Simple2D-23(重构)反走样几何图形
    Simple2D-22(重构)纹理池
  • 原文地址:https://www.cnblogs.com/yfz1552800131/p/7497305.html
Copyright © 2011-2022 走看看