#K4003. C4.03 编程中的数学

C4.03 编程中的数学

一、程序阅读。

#include<bits/stdc++.h>
using namespace std;
const int N=1e8+1;
int a[N],b[N];
int n,m,t=1;
void fun()
{
	a[0]=1;
	a[1]=1;
	for(int i=2;i<=n;i++)
	{
		if(a[i]==0)
		{
			b[t++]=i;
		}	
		for(int k=1;k<t&&b[k]*i<=n;k++)
		{
			a[b[k]*i]=1;
			if(i%b[k]==0)
			{
				break;
			}
		}		
	} 
} 
int main()
{
	cin>>n>>m;
	fun();
	for(int i=1;i<=m;i++)
	{
		int d;
		cin>>d;
		cout<<b[d]<<endl;
	}
	return 0;
}

判断题

  1. 程序中任意质数只会被标记一次?( ) {{ select(1) }}
  1. 此程序时间复杂度O(n*n)?( ) {{ select(2) }}
  1. 第三行代码可以变成#define N 1e8+1,程序结果不会发生改变?( ) {{ select(3) }}
  1. 程序为欧拉筛?( ) {{ select(4) }}

选择题

  1. 程序中输入2 1 4,输出结果等于?( ) {{ select(5) }}
  • 1
  • 0
  • 7
  • 无输出

二、程序填空

题目描述

输入一个偶数N,验证4~ N所有偶数是否符合哥德巴赫猜想。

哥德巴赫猜想: 任一大于2的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。

例如:10=3+7=5+510 = 3 + 7 = 5 + 5,则 10=5+510 = 5 + 5 是错误答案。

#include<bits/stdc++.h>
using namespace std;
int n;
bool fun(int m)
{
	for(int i=__①__; i*i__②__m; i++)
	{
		if(m%i==0)
		return 0;
	}
	return 1;
}
int main()
{
	cin>>n;
	for(int i=__③__; i<=n;__④__)
	{
		for(int j=2; j<=i/2; j++)
		{
			if(fun(j)&&fun(__⑤__))
			{
				cout<<i<<"="<<j<<"+"<<i-j<<"\n";
				break;
			}
		}
	}
	return 0;
}
  1. 第①处。( ) {{ select(6) }}
  • 0
  • 1
  • 2
  • n
  1. 第②处。( ) {{ select(7) }}
  • <=
  • <
  • !=
  • ==
  1. 第③处。( ) {{ select(8) }}
  • 1
  • 2
  • 4
  • 0
  1. 第④处。( ) {{ select(9) }}
  • i++
  • i+=2
  • i+2
  • ++i
  1. 第⑤处。( ) {{ select(10) }}
  • i-j
  • i
  • n
  • i*j