P8084 [COCI2011-2012#4] BROJ 题解

· · 题解

传送门

本题思路:

这道题我们可以试一下暴力,一个一个去枚举计算 P 的倍数,中途再判断一下这个数是否最小的公倍数是 P,过程中进行判定,如果超了就直接输出 -1,这样暴力就可以输出大部分答案。这样写必然是会超 1 个样例的时间,但是可以开 O2 过。

本题代码:

#include<bits/stdc++.h>
using namespace std;
int n,p,num;//n,p见题目中,num为答案 
int main()
{
    cin>>n>>p;
    if(p*n>1000000000)//如果p的n倍已经超过了边界,直接输出0,否则浪费时间
    {
        cout<<0;
        return 0;
    }
    for(int i=1;i<=n;i++)//枚举答案 
    {
        num+=p;//每次加上一个p,向前推进 
        if(num>1000000000)//如果超过了,直接输出0 
        {
            cout<<0;
            return 0;
        }
        for(int j=2;j<p;j++)//判断是否是最小因数 
        {
            if(num%j==0)
            {
               i--;//如果是就不算这个答案 
               break;
            }
        }
    }
    cout<<num;//输出答案    
    return 0;//完结撒花!!! 
}

请勿抄袭,用此方法请记得开洛谷的 O2 优化。