[计蒜客][质数]蒜头君的猜想 原创

算法标签

数学知识、质数、打表

来源

计蒜客2020蓝桥杯习题

题目简介

在这里插入图片描述

思路

显然我们要找的是满足条件的所有可能性
现在我们回到如何去找a+b=c中的ab
即我们可以发现特性 a+b=c,a=c-b
那么我们可以让a=1到a=n同时b=c-a来查找可能性,每获得一种可能就+1

做法1.
for (a :1 to n) && b = c - a
if(a+b==c&&prime(a)&&prime(b))cnt++;
手写prime()
这里两个数据超时

做法2
打表给出范围内所有质数表
如果a+b==c&&a\b都是质数则cnt++

AC代码

#include<iostream>

using namespace std;

const int N=8e6+10;
int a[N];
int n;

void check()
{
  for(int i=2;i<=n;i++)a[i]=1;
  
	for(int i=2;i<=n/i;i++)
    if(a[i])//如果是质数
      for(int j=2*i;j<=n;j+=i)//质数的倍数就不是质数(欧拉筛思想)
        a[j]=0;//非质数就给0
}

int main()
{
  cin>>n;
  
  check();
  
  int cnt=0;
  for(int i=2;i<=n/2;i++)//因为a+b=c所以知用列举一半,因为后半部分一模一样
    if(a[i]&&a[n-i])
      cnt++;
  
  cout<<cnt;
  
  return 0;
}
posted @ 2021-08-10 15:39  俺叫西西弗斯  阅读(0)  评论(0)    收藏  举报  来源