emmmmmm
为什么要用线筛??????
不感觉很麻烦吗??????
既然是智障制杖题,那么肯定要用很简单的算法啦~
下面,我就提供一种非常便于理解的膜你算法~~~
很明显,做了这题的人都会想到去重这个东西,bool数组是不现实的,那么鉴于n的值很小,我们就想到了暴力模拟,下面贴出代码(头文件啥的就不发了):
1 int n,m,ans; 2 int a[25];//定义 3 int main(){ 4 scanf("%d %d",&n,&m); 5 for(int i=1;i<=n;i++){//边读边做 6 scanf("%d",&a[i]);//读入 7 for(int j=a[i];j<=m;j+=a[i]){//题目说明了集合里一定是质数,所以只需要考虑集合里质数的倍数就好了 8 bool ok=true;//bool变量 9 for(int k=1;k<i;k++){//因为n很小,并且基于一点贪心的思想,就可以用一个模拟去重 10 if(j%a[k]==0){ 11 ok=false;//如果取过了,就不取 12 } 13 } 14 if(ok){//没有取过的情况 15 ans+=j; 16 ans%=376544743;//取模 17 } 18 } 19 } 20 printf("%d ",ans);//输出 21 return 0; 22 }
是不是很好理解呢~~~
本人QQ:2124652975,对题目有不理解的地方或是觉得在下表述不清的dalao欢迎骚扰~
还有就是,新人开博鼓励一下吧~~