题解 P2429 【制杖题】

· · 题解

做为一个制杖智障题。。。

直接模拟加暴力就行了

就是枚举输入的质数到m判重就行

那有同学就问m的范围到了1e9,开bool数组会炸,咋暴力啊。。。

这时我们需要一个STL神器。。。

就是

map

那啥又是map呢?

map是一个特殊的数组,一般的数组要开到1e9个空,比较浪费内存,map不同,它是你输入一个数就开一个空间,于是大大节省了空间,这样就可以放心暴力了。。

STL大法好

而且它的下标很特殊,可以是任何变量,举个栗子:

你可以定义 map<string,bool>a;

然后可以写成a[string]=1,用于字符串的判重

可以写一个map字符串判重的题2580

废话不多说,上代码

#include<bits/stdc++.h>
using namespace std;
map<int,bool>lxy;//map数组用于判重。。。
long long hrb[201],i,j,k,n,m,s=0,emm=1;
int main()
{
    scanf("%lld%lld",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%lld",&hrb[i]);
        for(k=1;;k++)//进行暴力枚举质因数
        {
            emm=hrb[i]*k;
            if(emm>m)break;//大于m退出枚举
            if(lxy[emm]==0)//map判重
            {
                lxy[emm]=1;
                s=(s+emm)%376544743;
            }
        }
    }
    printf("%lld",s);//输出答案
}

认为STL大法好,请点赞,关注,投币,素质三连谢谢