素数对猜想

描述:

让我们定义dn*为:*dn=pn*+1−*pn,其中pi*是第*i*个素数。显然有*d*1=1,且对于*n*>1有*dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数N

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5;
int Prime[N+5];
int cnt = 0; 
int main(){
    int n;
    scanf("%d",&n);
    if(n>=2){
        Prime[++cnt] = 2;
    }
    for(int i = 3;i<=n;i+=2){
        int q = sqrt(i);
        int j;
        for(j=3;j<=q;j+=2){
            if(i%j==0){
                break;
            }
        }
        if(j>q){
            Prime[++cnt] = i;
        }
    }
    int num = 0;
    for(int i=1;i<cnt;i++){
        if(Prime[i+1]-Prime[i]==2){
            num++;
        }
    }
    printf("%d",num);
    return 0;
} 

题解:

根据题目要求首先构建素数表,构建出n以内的素数表,然后从头开始遍历素数表,当满足条件时,数量++

关于查找素数的方法可以去看我的博客

找出不是两个数组共有的元素

描述:

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:

输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:

输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输入样例:

10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1

输出样例:

3 5 -15 6 4 1

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    cin>>m;
    int b[m];
    for(int i=0;i<m;i++){
        cin>>b[i];
    }
    int c[40];
    int len = 0;
    for(int i=0;i<n;i++){
        int j;
        for(j=0;j<m;j++){
            if(a[i]==b[j]){
                break;
            }
        }
        if(j==m){
            int k;
            for(k=0;k<len;k++){
                if(c[k]==a[i]){
                    break;
                }
            }
            if(k==len){
                c[len] = a[i];
                len++;
            }
        }
    }
    for(int i=0;i<m;i++){
        int j;
        for(j=0;j<n;j++){
            if(b[i]==a[j]){
                break;
            }
        }
        if(j==n){
            int k;
            for(k=0;k<len;k++){
                if(c[k]==b[i]){
                    break;
                }
            }
            if(k==len){
                c[len] = b[i];
                len++;
            }
        }
    }
    for(int i=0;i<len;i++){
        cout<<c[i];
        if(i!=len-1){
            cout<<" ";
        }
    }
    return 0;
}

题解:

读入数据之后,两层循环判断是否有A再B中没出现的数字,并判断这个数字有没有之前没选中过,再判断B中A没出现的数字,并判断,最后输出。


一只小菜鸡