列表

详情


QQ5. 素数对

描述

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

输入描述

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

输出描述

输出对数

示例1

输入:

10

输出:

2

原站题解

C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-05

#include<stdio.h>
int fun(int n);
int sum=0;
int main()
{
	int n;
	int i;
	int k=0;
	scanf("%d",&n);
	for(i=2;i<=n/2;i++)
	{
		k=fun(i);
		if(k==1)
			k=fun(n-i);
		if(k==1)
			sum++;
	}
	printf("%d\n",sum);
	return 0;
}
int fun(int n)
{
	int i,f=0;
	for(i=2;i<=n/2;i++)
	{
		if(n%i==0)
			break;
	}
	if(i>n/2)
		f=1;
	return f;
}

C 解法, 执行用时: 1ms, 内存消耗: 224KB, 提交时间: 2018-08-13

#include <stdio.h>
#include <string.h>
int sushu(int x)
{
    if(x==1) return 0;
    if(x==2) return 1;
    int j;
    for(j=2;j<x;j++)
    {
        if(x%j==0)
            return 0;
    }
    return 1;
}
int main()
{
    int dataInput;
    int i,j,index=0;
    scanf("%d",&dataInput);
    for(i=2;i<=dataInput/2;i++)
    {
        if(sushu(i)*sushu(dataInput-i)==1)//i+dataInput-i=dataInput
            index++;
    }
    printf("%d\n",index);
}










C++ 解法, 执行用时: 1ms, 内存消耗: 228KB, 提交时间: 2017-07-14

#include <stdio.h>
#include<stdbool.h>
#include<math.h>
int main() {
    int n;
    scanf("%d", &n);
    bool is_prime_number[n - 1]; //对应[2,n]    
    //变长数组不能初始化
    for (int i = 0; i < n - 1; i++) {
        is_prime_number[i] = true;
    }
    for (int i = 2; i <= sqrt(n); i++) {
        if (is_prime_number[i - 2]) {
            for (int j = i*i; j <= n; j += i) { //j初始值为i*i,因为若j有小于i的质因数,则j已被标记过。
                is_prime_number[j - 2] = false;
            }
        }
    }

    int n_pair = 0;
    for (int i = 0; i < n / 2 - 1; i++) {
        if (is_prime_number[i] && is_prime_number[n - 4 - i]) {
            ++n_pair;
        }
    }
    printf("%d", n_pair);
    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2017-06-26

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int a;
	cin>>a;
	bool shu[a+1];
	for(int i=2;i<=a;++i)
	shu[i]=true;
	shu[0]=false; 
	shu[1]=false;
	for(int i=3;i<=a;++i)
	{
		for(int j=2;j<=sqrt(i);++j)
		if(shu[i]==false)
		break;
		else
		if(i%j==0)
		shu[i]=false;
	}
	int count=0;
	for(int i=0;i<=a;++i)
	{
		for(int j=i;j<=a;++j)
		{
			if(shu[i]!=false && shu[j]!=false && i+j==a)
			{
				count++;
			}
		}
	}

cout<<count;
	
	return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 296KB, 提交时间: 2021-07-22

#include <stdio.h>
#include <string.h>

int main()
{
    int arr[128]={};
    int num;
    int i,j,k=0,count=0;
    scanf("%d",&num);
    for(i=2;i<=num;i++)
    {
        for(j=1;j<=i;j++)
        {
            if(i % j == 0)
                count++;
        }
        if(count == 2)
        {
            arr[k]=i;
            k++;
        }
        count=0;
    }
    for(i=0;i<k;i++)
    {
        
   	 	for(j=0;j<i+1;j++)
   	 	{
   	 		if(arr[i]+arr[j]==num)
   	 			count++;
		}
    }
     printf("%d ",count);     
	return 0 ; 
}

上一题