清北学堂part1

睡眠质量相当高的一天(滑稽)

整一整都学了啥

1:高精度(相当水,毕竟学过)

2:模运算(?! 这还要讲?)

3:快速幂(还要谢一位学习高数时间为我们讲解的同学...不得不说真的有效,快速幂已经是随手打的了,感谢这位同学)

4:最大公约数,最小公倍数

5:埃氏筛法

我突然觉得要写一下线性筛...

代码:

#include<bits/stdc++.h>
using namespace std;
int pri[1000005];
int ok[5000000];
int t;
int main(){
    int n;
    cin>>n;
    for(int i=2;i<=n;i++){
        if(!ok[i]){
            t++;
            pri[t]=i;
        }
        for(int j=1;j<=t&&i*pri[j]<=n;j++){
            ok[i*pri[j]]=1;//这前面相当简单...
            if(!(i%pri[j])) break;//important point(以下为"ip")
        }
    }
    for(int i=1;i<=t;i++) printf("%d\n",pri[i]);
    return 0;
}

我现在真的后悔发表那个"筛质数大优化"...不过也好,多一种方法...

ip:做这个操作的目的在于此--------

如果i%pri==0,说明i中含有pri作为质因数,而以下的i和pri[i]都比pri大,但其乘积一定含pri为质因数,然而我们的目的在于用最小的质因数排掉它,所以以下所有运算都将成为累赘,故舍去.等着以后遇上pri在做处理

不知道讲清楚没有...

posted @ 2019-04-04 20:18  _Alex_Mercer  阅读(130)  评论(0编辑  收藏  举报