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;   
    }
  • 相关阅读:
    Win10 Theano Install Guide
    mysql 查看版本和是否支持分区
    [mysql]Date和String相互转换(DATE_FORMAT&STR_TO_DATE)
    mysql运用now(3)存储时间到毫秒
    mysql按天,按周,按月,按季度,按年统计数据
    对象的copy
    定时调度任务quartz
    mysql使用navicat编写调用存储过程
    mysql批量插入,批量更新
    Mybatis分页插件pagehelper的使用
  • 原文地址:https://www.cnblogs.com/yfz1552800131/p/7497305.html
Copyright © 2011-2022 走看看