程序稍微修改即可满足所有情况,小编也非常感谢各位小伙伴的提醒及参与,完善后的程序如下。小伙们如果有更好的解决方法也可以后台回复小编哦。
【输入格式】
第一行二个自然数N,K,表示几本书以及已有书的书号(<=200000) 第二行开始有N个整数,表示这些书的书号
【输出格式】
第一行一个数,表示两本书书号加起来的和 第二行一个字符,表示和是否为素数,若是则输出”Y”否则输出”F”(引号不打出)
【输入输出样例】
输入:
6 16
14 5 3 1 17 20
输出:
31
Y
题目网站链接:
http://go.helloworldroom.com:8072/problem/2492
4,9,10,12这些自然数,除了1和本身之外还有其他约数,所以它们都不是素数。
判断一个自然数n是否是素数,有两种常用方法:
1.判断n是否能被2~n-1间的数整除
最直观的方法,根据定义,因为质数除了1和本身之外没有其他约数,所以判断n是否为质数,直接判断从2到n-1是否存在n的约数即可。利用循环从2开始到n-1结束依次被该自然数整除,如果余数为0,则说明在2~n-1之间有该自然数的约数,那么,这个数不是素数。
2.判断n是否能被2~√n间的数整除
第一种判断方法,明显存在效率低的问题。对于自然数n,其实并不需要从2判断到n-1,我们知道,一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n)(n的平方根),一个大于等于sqrt(n),据此,上述代码中并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数。
第二行输入N个整数,表示N本书的书号,显然,这里需要用数组来存放书号:
可以将存放在数组中的数据进行排序,同学们可能会想到很多排序的方法,冒泡排序,选择排序,插入排序等等。其实,我们也可以调用一个排序函数,这会使我们的程序更加简洁。
sort()函数用于C++中,对给定区间所有元素进行排序。头文件是#include <algorithm>
对于排序后的数组,只要满足条件:
a[i] < k && a[i + 1] > k也就找到了两个最接近目标书号的两个数据啦,接下来只需将两个数据求和并判断是否为素数即可。
每周六,周日上午10:00都有冬令营相关课程的免费试听课!快来预约报名吧!