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

数论与图论

数论🎈

筛质数

最普通的筛法O(nlogn):
void get_primes2(){for(int i=2;i<=n;i++){if(!st[i]) primes[cnt++]=i;//把素数存起来for(int j=i;j<=n;j+=i){//不管是合数还是质数,都用来筛掉后面它的倍数st[j]=true;}}
}

诶氏筛法 O(nloglogn):

void get_primes1(){for(int i=2;i<=n;i++){if(!st[i]){primes[cnt++]=i;for(int j=i;j<=n;j+=i) st[j]=true;//可以用质数就把所有的合数都筛掉;}}
}

线性筛O(n)

void get_primes(){//外层从2~n迭代,因为这毕竟算的是1~n中质数的个数,而不是某个数是不是质数的判定for(int i=2;i<=n;i++){if(!st[i]) primes[cnt++]=i;for(int j=0;primes[j]<=n/i;j++){//primes[j]<=n/i:变形一下得到——primes[j]*i<=n,把大于n的合数都筛了就//没啥意义了st[primes[j]*i]=true;//用最小质因子去筛合数//1)当i%primes[j]!=0时,说明此时遍历到的primes[j]不是i的质因子,那么只可能是此时的primes[j]<i的//最小质因子,所以primes[j]*i的最小质因子就是primes[j];//2)当有i%primes[j]==0时,说明i的最小质因子是primes[j],因此primes[j]*i的最小质因子也就应该是//prime[j],之后接着用st[primes[j+1]*i]=true去筛合数时,就不是用最小质因子去更新了,因为i有最小//质因子primes[j]<primes[j+1],此时的primes[j+1]不是primes[j+1]*i的最小质因子,此时就应该//退出循环,避免之后重复进行筛选。if(i%primes[j]==0) break;}}}

试除法判断质数

输入n表示要判断的n个数,接下来输入n个数,判断其是否为质数

#include<bits/stdc++.h>
using namespace std;
int n;
bool isprime(long long a){if(a==1){return 0;}else if(a==2){return 1;}for(int i=2;i<=a/i;i++){//不要用开方或者i*i,开方函数较慢,i*i会越界if(a%i==0){return 0;}}return 1;
}
int main(){cin>>n;while(n--){long long a;cin>>a;if(isprime(a)) cout<<"Yes"<<endl;else cout<<"No"<<endl;}

分解质因数

解题思路:
  • x 的质因子最多只包含一个大于 根号x 的质数。如果有两个,这两个因子的乘积就会大于 x,矛盾。
  • i 从 2 遍历到 根号x。 用 x / i,如果余数为 0,则 i 是一个质因子。
  • s 表示质因子 i 的指数,x /= i 为 0,则 s++, x = x / i 。
  • 最后检查是否有大于 根号x 的质因子,如果有,输出。
#include <iostream>
#include <algorithm>using namespace std;void divide(int x)
{for (int i = 2; i <= x / i; i ++ )//i <= x / i:防止越界,速度大于 i < sqrt(x)if (x % i == 0)//i为底数{int s = 0;//s为指数while (x % i == 0) x /= i, s ++ ;cout << i << ' ' << s << endl;//输出}if (x > 1) cout << x << ' ' << 1 << endl;//如果x还有剩余,单独处理cout << endl;
}
{
int main()
{int n;cin >> n;while (n -- ){int x;cin >> x;divide(x);}return 0;
}

相关文章:

  • C++ 特殊成员函数:默认构造函数、默认析构函数、复制构造函数、赋值运算符
  • 华为C++笔试--拓扑排序
  • html css实现钟表简单移动
  • 山海鲸可视化:工厂运营的智慧之眼
  • Bug: git stash恢复误drop的提交
  • 25考研北大软微该怎么做?
  • mysql 正则表达式用法(一)
  • 【基础算法练习】Trie 树
  • 【算法专题】贪心算法
  • git的分支操作
  • 特斯拉FSD的神经网络(Tesla 2022 AI Day)
  • 自然语言处理 TF-IDF
  • 有关UE5在VisualStudio升级后产生C++无法编译的问题及处理方案
  • 【Vue】为什么Vue3使用Proxy代替defineProperty?
  • Log4j2的PatternLayout详解
  • Angular6错误 Service: No provider for Renderer2
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • extjs4学习之配置
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java IO学习笔记一
  • java8 Stream Pipelines 浅析
  • PHP 小技巧
  • Python_OOP
  • TCP拥塞控制
  • Tornado学习笔记(1)
  • VUE es6技巧写法(持续更新中~~~)
  • Vue学习第二天
  • 阿里云前端周刊 - 第 26 期
  • 百度小程序遇到的问题
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 基于游标的分页接口实现
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何设计一个微型分布式架构?
  • 使用Swoole加速Laravel(正式环境中)
  • 自制字幕遮挡器
  • hi-nginx-1.3.4编译安装
  • Java性能优化之JVM GC(垃圾回收机制)
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #define,static,const,三种常量的区别
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)JAVA使用POI操作excel
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)Dubbo快速入门、介绍、使用
  • (转)四层和七层负载均衡的区别
  • (转载)Linux网络编程入门
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET Core 中的路径问题