这是2017年提高组的第一题,是一个小学奥数题?听说很多大佬爆零了,我AC了,,,
这个题首先给出两个素数,问取任意个这两个素数之和不可以达到的最大的数是多少?拿到这个题首先很蒙,于是试了试样例,并没有得到什么启发,于是就构思代码,想双层for循环这两个数的个数,但怎样最大呢?然后再次去分析数据。eg.7&3=11,2&5=3,3$4=5。突然间,发现这些值都是a*b-(a+b)。但是看数据范围,发现1*10^9-->1*10^18,所以一定要开long long.
1.拿到这种“奥数”,一定要分析透彻数据,寻找公式,再思考原理去验证公式正确性,前提是数据必须算对
2.注意对数据范围进行运算
代码
#include<iostream> #include<cstdio> using namespace std; int main(){ long long a,b; cin>>a>>b; cout<<(a*b)-(a+b); return 0; }
是的,这个题的代码可能是历史上最简单的了。
原文地址:https://www.cnblogs.com/china-mjr/p/11330005.html
时间: 2024-10-03 05:22:46