题解 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);//输出答案
}