当前位置: 首页 > wzjs >正文

松山湖仿做网站科技馆门票网上预约

松山湖仿做网站,科技馆门票网上预约,企业品牌推广,北京商城网站建设费用一&#xff1a;筛质数&#xff1a; 1-埃氏筛法 该算法核心是从 2 开始&#xff0c;把每个质数的倍数标记为合数&#xff0c;时间复杂度约为 O(nloglogn)。 #include <iostream> #include <vector>u sing namespace std; const int N 1000010; bool st[N]; …

一:筛质数:

1-埃氏筛法

该算法核心是从 2 开始,把每个质数的倍数标记为合数,时间复杂度约为 O(nloglogn)。

#include <iostream>

#include <vector>u

sing namespace std;

const int N = 1000010;

bool st[N];  // 标记数组,true表示是合数,false表示是质数

void get_primes(int n) {

    for (int i = 2; i <= n; i++) {

        if (!st[i]) {

            for (int j = i + i; j <= n; j += i) {

                st[j] = true;

            }

        }

    }}

int main() {

    int n;

    cin >> n;

    get_primes(n);

    for (int i = 2; i <= n; i++) {

        if (!st[i]) cout << i << ' ';

    }

    return 0;}

2-线性筛法:

在埃氏筛法的基础上进行进一步的优化,保证所有的合数都是被最小的质因子筛掉

#include <iostream>

#include <vector>

using namespace std;

const int N = 1000010;

int primes[N], cnt;  // primes数组存储质数,cnt记录质数个数

bool st[N];  // 标记数组,true表示是合数,false表示是质数

void get_primes(int n) {

    for (int i = 2; i <= n; i++) {

        if (!st[i]) primes[cnt++] = i;

        for (int j = 0; primes[j] <= n / i; j++) {

            st[primes[j] * i] = true;

            if (i % primes[j] == 0) break;

        }

}

}

int main() {

    int n;

    cin >> n;

    get_primes(n);

    for (int i = 0; i < cnt; i++) {

        cout << primes[i] << ' ';

    }

return 0;

}

二:最大公约数和最小公倍数

最小公约数:

是扩展欧几里得的基础版本,可以求出a和b的最小公约数

int gcd(int a, int b) {

return b ? gcd(b, a % b) : a;

}

int main() {

    int a, b;

    cin >> a >> b;

    cout << gcd(a, b) << endl;

return 0;

}

最小公倍数:

int lcm(int a, int b) {

return a*b/gcd(a,  b);

}

三:质因数:分解质因数,质因数的和,质因数个数

分解质因数:

一个很暴力的做法,最后得到n的所有质因数

#include <iostream>

using namespace std;

void divide(int x) {

    for (int i = 2; i <= x / i; i++) {

        if (x % i == 0) {

            int s = 0;

            while (x % i == 0) {

                x /= i;

                s++;

            }

            cout << i << ' ' << s << endl;

        }

    }

if (x > 1) cout << x << ' ' << 1 << endl;

}

int main() {

    int n;

    cin >> n;

    divide(n);

return 0;

}

约数的个数

若 N=p1^a1*p2^a2*⋯pk^ak​​,则 N 的约数个数为 (a1+1)(a2+1)⋯(ak+1)。

#include <iostream>

using namespace std;

int numofdividors(int x) {

    int res=1;

    for (int i = 2; i <= x / i; i++) {

        if (x % i == 0) {

            int s = 0;

            while (x % i == 0) {

                x /= i;

                s++;

            }

            cout << i << ' ' << s << endl;

            res=res*(s+1);

        }

    }

if (x > 1){

     cout << x << ' ' << 1 << endl;

     res*=2;

}

return res;

}

int main() {

    int n;

    cin >> n;

    cout<<divide(n);

return 0;

}

约数的和

N=p1^a1*p2^a2⋯pk^ak则 N 的

约数和为 (p1^0+p1^1+⋯+p1^a1)(p2^0+p2^1+⋯+p2^a2)⋯(pk^0+pk^1++pk^ak)。

int main() {

    int n;

    cin >> n;

    unordered_map<int, int> primes;

    while (n--) {

        int x;

        cin >> x;

        for (int i = 2; i <= x / i; i++) {

            while (x % i == 0) {

                x /= i;

                primes[i]++;

            }

        }

        if (x > 1) primes[x]++;

    }

    LL res = 1;

    for (auto p : primes) {

        LL a = p.first, b = p.second;

        LL t = 1;

        while (b--) t = (t * a + 1) % mod;

        res = res * t % mod;

    }

    cout << res << endl;

return 0;

}

四:快速幂和乘法逆元

快速幂可以在logn级别的时间里确定n^b mod p

#include <iostream>

using namespace std;

typedef long long LL;

快速幂:

LL qmi(int a, int k, int p) {

    LL res = 1;

    while (k) {

        if (k & 1) res = res * a % p;

        a = (LL)a * a % p;

        k >>= 1;

    }

return res;

}

int main() {

    int a, k, p;

    cin >> a >> k >> p;

    cout << qmi(a, k, p) << endl;

return 0;

}

乘法逆元:

在mod p的环境下 a^-1 = a^ (p-2)

#include <iostream>

using namespace std;

typedef long long LL;

LL qmi(int a, int k, int p) {

    LL res = 1;

    while (k) {

        if (k & 1) res = res * a % p;

        a = (LL)a * a % p;

        k >>= 1;

    }

return res;

}

int main() {

    int a, p;

    cin >> a >> p;

    if (a % p == 0) cout << "impossible" << endl;

    else cout << qmi(a, p - 2, p) << endl;

return 0;

}

五:欧拉函数

欧拉函数 φ(n) 表示小于等于 n 且与 n 互质的正整数的个数。若 n=p1^a1*p2^a2*⋯pk^ak​,

则 φ(n)=n(1−1/p1)(1−1/p2)⋯(1−1/pk)。

欧拉函数模版:

求出某一个数的欧拉函数值

#include <iostream>using namespace std;

int phi(int x) {

    int res = x;

    for (int i = 2; i <= x / i; i++) {

        if (x % i == 0) {

            res = res / i * (i - 1);

            while (x % i == 0) x /= i;

        }

    }

    if (x > 1) res = res / x * (x - 1);

    return res;}

int main() {

    int n;

    cin >> n;

    cout << phi(n) << endl;

return 0;

}

线性筛法求出1~n的欧拉函数:

只有一点点的改变

#include <iostream>

#include <vector>

using namespace std;

const int N = 1000010;

int primes[N], cnt;  // primes数组存储质数,cnt记录质数个数

bool st[N];  // 标记数组,true表示是合数,false表示是质数

void get_primes(int n) {

    for (int i = 2; i <= n; i++) {

        if (!st[i]) {

             primes[cnt++] = i;

             phi[cnt-1]=i-1;

}

        for (int j = 0; primes[j] <= n / i; j++) {

            st[primes[j] * i] = true;

            if (i % primes[j] == 0) {

                  phi[i*prime[j]]=phi[i]*prime[j];

                  break;

}

            phi[i*prime[j]]=phi[i]*(prime[j]-1);

        }

}

}

int main() {

    int n;

    cin >> n;

    get_primes(n);

    for (int i = 0; i < cnt; i++) {

        cout << primes[i] << ' ';

    }

return 0;

}


文章转载自:

http://LNGQjBZ2.ptwqf.cn
http://EsznhuDn.ptwqf.cn
http://315xhQg1.ptwqf.cn
http://EP0uywba.ptwqf.cn
http://khb37mqy.ptwqf.cn
http://IS7uPVyH.ptwqf.cn
http://qSryX4pc.ptwqf.cn
http://LpeyZH9O.ptwqf.cn
http://L3S5DdfN.ptwqf.cn
http://RM2BZ7vj.ptwqf.cn
http://5QpxKRVr.ptwqf.cn
http://4gLxsE2O.ptwqf.cn
http://CNRfRlvA.ptwqf.cn
http://9SI4BpO0.ptwqf.cn
http://ev1se7eT.ptwqf.cn
http://GFlGT1YX.ptwqf.cn
http://1Jo994CC.ptwqf.cn
http://7XVjINYm.ptwqf.cn
http://yyqDFdSL.ptwqf.cn
http://we2i7w8o.ptwqf.cn
http://crC5Akhd.ptwqf.cn
http://zcRVvyeB.ptwqf.cn
http://WICBftQM.ptwqf.cn
http://Hxpqq0Yo.ptwqf.cn
http://HaNw12TG.ptwqf.cn
http://Ra7DIVZf.ptwqf.cn
http://wMp0L7AO.ptwqf.cn
http://Pos1fiJw.ptwqf.cn
http://K6kIA3PT.ptwqf.cn
http://ERQ9iD7N.ptwqf.cn
http://www.dtcms.com/wzjs/736277.html

相关文章:

  • 长沙网站到首页排名长沙sem培训
  • 织梦网站调整怎么做系统网站
  • 怎么做一个盈利网站个人建网站wordpress
  • 东莞如何建设网站制作平台许昌网站开发哪家好
  • 阿里巴巴网站架构网站备案完毕 怎样建设网站
  • 惠州网站设计公司棋牌类网站开发
  • 湖南省建设人力资源网站ktv网络推广方案
  • 环保网站建设公司排名商城网站设计需要哪些技术
  • 网站建设技术员招聘网站建设国内外研究现状
  • 站酷的网址厦门今天最新通知
  • 设计企业网站珠海网站设计网络优化
  • dw做的网站如何上传动态模板网站建设
  • 像做游戏一样编程的网站门户网站建设 增强责任意识
  • 服装工厂做网站的好处一条专访是哪个网站做的
  • 微网站 免费模板html网页设计简单
  • 阿里巴巴网站建设分析wordpress linux下载
  • 网站开发团队工作总结怎么建立手机网站
  • 网站重新建设的通知做网站没有必须要ftp吗
  • 银川市住房和城乡建设网站课程微网站开发技术
  • 网站建设工作总结范文百度seo营销
  • 网站调优技能网站代运营方案
  • 制造业网站建设wordpress插件太多
  • 巨野住房和城乡建设局网站可以做区位分析的网站
  • 怎么找网站是由什么建的如何破解wordpress主题
  • 怎么修改网站域名wordpress密码长度
  • 合肥瑶海区教育局官网seo公司 上海
  • 网站备案名称中国开头中国建设网官方网站6
  • 企业网站cms源码做网站怎么引流
  • xampp做网站可以吗wordpress php那个版本
  • 建站系统破解源码东方财富网官方网站首页