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;   
    }
  • 相关阅读:
    不参加IT培训,如何通过自学的方式成功转行?(蜗牛学院)
    惠普电脑win10关闭自动调节亮度
    原生Ajax发送get、post请求每一步
    HTML5的web 存储localStorage、sessionStorage
    node + multer存储element-ui上传的图片
    html块级元素的水平垂、直居中的方式
    vuex之Mutation(三)
    mint ui的tabBar监听路由变化实现tabBar切换
    Vue使用better-scroll左右菜单联动
    vuex之getter(二)
  • 原文地址:https://www.cnblogs.com/yfz1552800131/p/7497305.html
Copyright © 2011-2022 走看看