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

哪家网站建设服务好啊搜索引擎优化包括哪些

哪家网站建设服务好啊,搜索引擎优化包括哪些,可以做羞羞的游戏视频网站,内蒙古国风网站建设目录 一、判定质数思路分析代码实现 二、分解质因数思路分析典型题目代码实现 三、质数筛经典题目思路分析1. 朴素筛法2. 埃氏筛法3. 欧拉筛法 一、判定质数 思路分析 由于每个合数的因子是成对出现的,即如果 d d d 是 n n n 的因子,那么 n d \frac…

目录

  • 一、判定质数
    • 思路分析
    • 代码实现
  • 二、分解质因数
    • 思路分析
    • 典型题目
    • 代码实现
  • 三、质数筛
    • 经典题目
    • 思路分析
      • 1. 朴素筛法
      • 2. 埃氏筛法
      • 3. 欧拉筛法


一、判定质数

思路分析

由于每个合数的因子是成对出现的,即如果 d d d n n n 的因子,那么 n d \frac{n}{d} dn 也是 n n n 的因子,故从 1 1 1 n n n 的枚举可以缩减到 1 1 1 n \sqrt{n} n ,即让 d ≤ n d d \leq \frac{n}{d} ddn,从而得到 d ≤ n d \leq \sqrt{n} dn


代码实现

bool is_prime(int n)
{if (n < 2) return false;for (int i = 2; i <= n / i; ++i){if (n % i == 0) return false;}return true;
}

时间复杂度: O ( n ) O(\sqrt{n}) O(n )


二、分解质因数

思路分析

每个合数都是由质数相乘得到的。合数可以写成质因数的乘积,这是数论中的一个基本命题。

例如:
12 = 2 * 2 * 3
18 = 2 * 3 * 3
24 = 2 * 2 * 2 * 3

① 对于任何一个合数 n n n,在它的质因数分解中,至多有一个质因子大于 n \sqrt{n} n

② 同时也可以推出,对任何一个合数 n n n,在它的质因数分解中,至少会有一个质因子小于或等于 n \sqrt{n} n


典型题目

题目描述:
给定 n n n 个正整数 a i a_i ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。

输入格式:
第一行包含整数 n n n

接下来 n n n 行,每行包含一个正整数 a i a_i ai

输出格式:
对于每个正整数 a i a_i ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。

每个正整数的质因数全部输出完毕后,输出一个空行。

数据范围:
1 ≤ n ≤ 100 , 2 ≤ a i ≤ 2 ∗ 1 0 9 1≤n≤100,2≤a_i≤2*10^9 1n100,2ai2109

输入样例:

2
6
8

输出样例:

2 1
3 12 3

代码实现

#define _CRT_NO_SECURE_WARNINGS
#include<iostream>using namespace std;void divide(int x)
{for (int i = 2; i <= x / i; ++i) // 遍历出所有小于或等于sqrt(n)的质因子{if (x % i == 0){int cnt = 0;while (x % i == 0){cnt++;x /= i;}cout << i << ' ' << cnt << endl;}}// 输出大于sqrt(n)的质因子或是质数本身if (x > 1) cout << x << ' ' << 1 << endl;cout << endl;
}
int main()
{int n;cin >> n;while (n--){int x;cin >> x;divide(x);}return 0;
}

时间复杂度:在 O ( log ⁡ n ) O(\log n) O(logn) O ( n ) O(\sqrt n) O(n )之间
解释:若 n n n 2 2 2 的倍数,时间复杂度将会变为 O ( log ⁡ n ) O(\log n) O(logn)


三、质数筛

经典题目

题目描述:
给定一个正整数 n n n,请你求出 1 ∼ n 1∼n 1n 中质数的个数。

输入格式:
共一行,包含整数 n n n

输出格式:
共一行,包含一个整数,表示 1 ∼ n 1∼n 1n 中质数的个数。

数据范围:
1 ≤ n ≤ 1 0 6 1≤n≤10^6 1n106

输入样例:

8

输出样例:

4

思路分析

在这里插入图片描述
通过将素数的倍数筛掉的方法,剩余存留的则全为质数。

筛完后 P P P 2 2 2 ~ ( P − 1 P-1 P1) 之间不存在倍数关系,即 P P P 无质因子在 2 2 2 ~ ( P − 1 P-1 P1) 之间。


1. 朴素筛法

通过将2~n的所有数的倍数筛掉的方法来得到范围内所有的质数

#define _CRT_NO_SECURE_WARNINGS
#include<iostream>using namespace std;const int N = 1e6 + 10;
int prime[N], cnt;
bool st[N];void get_prime(int n)
{for (int i = 2; i <= n; ++i){if (!st[i]){prime[cnt++] = i;}for (int j = 2 * i; j <= n; j += i) st[j] = true; // 将2~n所有数的倍数都打上标记}
}
int main()
{int n;cin >> n;get_prime(n);cout << cnt << endl;return 0;
}

时间复杂度: O ( n log ⁡ n ) O(n \log n) O(nlogn)

n 2 + n 3 + n 4 + . . . + + n n = n ( 1 2 + 1 3 + 1 4 + . . . + 1 n ) \frac{n}{2} + \frac{n}{3} + \frac{n}{4} + ... + + \frac{n}{n} = n(\frac{1}{2} + \frac{1}{3} + \frac{1}{4} + ... + \frac{1}{n}) 2n+3n+4n+...++nn=n(21+31+41+...+n1)

调和级数: lim ⁡ n → ∞ ( 1 2 + 1 3 + 1 4 + . . . + 1 n ) = ln ⁡ n + c \lim_{n \to \infty} (\frac{1}{2} + \frac{1}{3} + \frac{1}{4} + ... + \frac{1}{n}) = \ln n + c limn(21+31+41+...+n1)=lnn+c (欧拉常数 c = 0.577 c = 0.577 c=0.577)

因此可得时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn)


2. 埃氏筛法

优化了朴素筛法,只将2~n的质数的倍数筛掉的方法来得到范围内所有的质数

#define _CRT_NO_SECURE_WARNINGS
#include<iostream>using namespace std;const int N = 1e6 + 10;
int prime[N], cnt;
bool st[N];void get_prime(int n)
{for (int i = 2; i <= n; ++i){if (st[i]) continue;prime[cnt++] = i;for (int j = 2 * i; j <= n; j += i) st[j] = true; // 将2~n所有质数的倍数都打上标记}
}
int main()
{int n;cin >> n;get_prime(n);cout << cnt << endl;return 0;
}

时间复杂度为 O ( n log ⁡ log ⁡ n ) O(n \log \log n) O(nloglogn)

质数定理:在 1 1 1 n n n 之间的质数个数约等于 n ln ⁡ n \frac{n}{\ln n} lnnn


3. 欧拉筛法

核心思想:在埃氏筛法的基础上,让每个合数只被它的最小质因子筛选一次,以达到不重复的目的。

步骤:

  • i = 2 i = 2 i=2 开始,如果 i i i 还没有被筛掉,则将 i i i 加入至素数列表中。
  • 遍历当前素数列表 p r i m e [ ] prime[] prime[],筛去 i ∗ p r i m e [ j ] i ∗ prime[j] iprime[j]
    (保证 p r i m e [ j ] ∗ i prime[j] ∗ i prime[j]i 不能越界,因为越界了对结果没意义。即 i ∗ p r i m e [ j ] ≤ n i ∗ prime[j] \leq n iprime[j]n
  • 当遍历到能整除 i 的素数 p r i m e [ j ] prime[j] prime[j] 时,筛去 i ∗ p r i m e [ j ] i ∗ prime[j] iprime[j],停止对素数列表的遍历。
  • 重复 2 , 3 , 4 2,3,4 2,3,4,直到所有不超过 n n n 的整数都被遍历过素数列表中的元素即为所求的不超过 n n n 的所有素数。
#define _CRT_NO_SECURE_WARNINGS
#include<iostream>using namespace std;const int N = 1e6 + 10;
int cnt, prime[N];
bool st[N];void get_prime(int n)
{for (int i = 2; i <= n; ++i){if (!st[i]) prime[cnt++] = i;for (int j = 0; prime[j] <= n / i; j++){st[prime[j] * i] = true;if (i % prime[j] == 0) break; // 只被它的最小质因子筛选一次}}
}
int main()
{int n;cin >> n;get_prime(n);cout << cnt << endl;return 0;
}

n < 1 0 6 n<10^6 n<106,欧拉筛和埃氏筛所花费的时间差不多;但是若 n > 1 0 7 n>10^7 n>107,欧拉筛会比埃氏筛快了大概一倍。

http://www.shuangfujiaoyu.com/news/22030.html

相关文章:

  • 抵押网站建设方案宁波网站建设推广平台
  • 怎做连接网站网站媒体推广方案
  • 求推荐比较靠谱的代做毕设网站推广引流平台
  • 17网站一起做网店池尾短视频营销策略有哪些
  • 加强网站备案管理专项行动外链购买交易平台
  • 做网站一般都选哪家行者seo无敌
  • 北京市网站公安备案查询系统有趣软文广告经典案例
  • 现在web开发用什么技术seo的方式有哪些
  • 西昌城乡建设网站seo排名优化哪家好
  • 网站可信认证必做樱花12e56
  • 找不同 网站开发北京aso优化
  • 素材网站pinterestseo排名优化软件价格
  • 中国小康建设官方网站google浏览器下载安装
  • 合肥那家公司做网站赛雷猴是什么意思
  • 个人网站怎么制作成图片郑州网站推广优化
  • 做房产经纪的那些网站可以进客小红书推广策略
  • 网站建设方案选公司google网站入口
  • 怎么注册晋江网站做的什么是网络营销策略
  • 优秀网站大全怎么在百度发布自己的文章
  • 我的世界做图片的网站广点通推广登录入口
  • hqz行情站国际新闻头条最新消息
  • 红塔网站制作国外网站加速
  • 湘潭网站建设怎么联系百度客服
  • 如何创建网站后台百度快照替代
  • 海外仓网站建设网络推广引流是做什么的
  • 北京做网站的公司有哪些如何在百度上推广业务
  • 怎么建设商业网站怎么建立一个网站
  • 贵港市建设局网站企业管理
  • 可信赖的常州网站建设填写电话的广告
  • 网站文章更新频率女教师遭网课入侵视频大全