首页 > 其他分享 >质数

质数

时间:2023-05-27 23:11:24浏览次数:27  
标签:prime int 质数 break vis ivis

N足够大时,质数大约有N/InN个

质数的判定:

试除法——扫描2~sqrt(n)

 

质数的筛选:

Eratosthenes筛法基本思想——x的倍数都不是质数

1 for(int i=2;i<=n;i++){
2 
3     if(vis[i]) continue;
4 
5     vis[i]=1;cout<<i<<endl;
6 
7     for(int j=i;j<=n/i;j++) vis[i*j]=1;
8 
9 }//注意j是从i开始,因为小于x方的x的倍数已被标记了

 

线性筛基本思想——用vis数组来维护每个数的最小质因子

 1 for(int i=2;i<=n;i++){
 2 
 3     if(vis[i]==0){
 4 
 5         prime[++m]=i;
 6     
 7         vis[i]=i;//质数的最小质因子为本身
 8 
 9     }
10 
11     for(int j=1;j<=m;j++){//用比自己小的质因子来筛后面的数
12 
13         if(prime[j]>vis[i]||(prime[j]*i)>n) break;//前一个是i为合数的情况
14 
15         vis[prime[j]*i]=prime[j];
16 
17     }
18 
19 }

 

质因数的分解

试除法

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

    if(vis[i]==0){

        prime[++m]=i;

        vis[i]=i;//质数的最小质因子为本身

    }

    for(int j=1;j<=m;j++){//用比自己小的质因子来筛后面的数

        if(prime[j]>vis[i]||(prime[j]*i)>n) break;//前一个是i为合数的情况

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

        }

}    

 

标签:prime,int,质数,break,vis,ivis
From: https://www.cnblogs.com/patrick-star-/p/17437545.html

相关文章

  • 用JavaScript求1000以内的质数
    varprimes=[2];//2是质数,先将其加入质数数组中for(vari=3;i<=1000;i++){varisPrime=true;//假设i是质数for(varj=0;j<primes.length&&primes[j]<=Math.sqrt(i);j++){if(i%primes[j]===0){isPrime=false;//如果i可......
  • 质数、约数
    质数相关一、算数基本定理任何一个大于1的正整数都能唯一分解成有限个质数的乘积写作:\[n=p_1^{c1}p_2^{c2}\dotsp_m^{cm}\]\[=\prod_{i=1}^mp_i^{ci}\]二、因数分布若存在一个正整数$n$为合数,则存在一个数$k$,满足$2$$\le$$k\le$$\sqrt{n}$且......
  • 3-9 编写程序判别一个数是否是质数,在主程序中实现输入输出。
    设计思路:可以设计一个标记点,用于判断,再加上循环语句break语句和continue语句的结合使用设计程序;代码:#include<iostream>usingnamespacestd;intmain(){inta,flag=0,i;cin>>a;if(a<=2)cout<<a<<"是质数";elseif(a>2){for(i=2;i<......
  • 输出所有小于100的质数
    #include<stdio.h>intmain(){inti=0;for(i=1;i<=100;i++){intj=0;for(j=2;j<=i;j++){if(i%j==0){break;}}if(i==j){......
  • 质数 埃氏
    #include<bits/stdc++.h>usingnamespacestd;defineN1000000intb[1000005],n,cnt;intmain(){ scanf("%d",&n); for(inti=2;i*i<=N;i++){ for(intj=i*i;j<=N;j+=i) b[j]=1; } for(inti=2;i<=N;i++)......
  • POJ2739 Sum of Consecutive Prime Numbers&&Acwing4938 连续质数之和
    方法:单调队列为什么是单调队列?因为这里让我们求连续的质数和,我们可以利用欧拉筛来维护质数,再利用单调队列来维护连续的质数。代码(POJ不支持C++11差评):#include<cstdlib>#include<cstring>#include<cstdio>#include<cctype>namespaceFastIo{ #definegcgetchar() #d......
  • AcWing 726. 质数
    AcWing726.质数1.地址https://www.acwing.com/problem/content/728/2.题解//此题跟完全数这道题差不多#include<iostream>#include<cstdio>#include<cmath>usingnamespacestd;intmain(){intcount;intnumber;intflag=1;sc......
  • 算法3:质数的个数
    一、质数的定义质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。二、判断质数的方法1for(intj=2;j<i;j++){2if(i%j==0)3break;4if(i==j)5cout<<i<<"";6}三、完整代码1#include<bits/stdc......
  • 判断是不是质数
    importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();booleanisPrime=true;for(inti=2;i<n;i++){......
  • #10024. 「一本通 1.3 练习 3」质数方阵
    loj题目传送门一本通题目传送门洛谷传送门原题是UVA835,是多测思路肯定是要剪枝的呀众所周知,dfs的路径像树一样显而易见,树的某一层的节点越少,他的下面的分支就越少于是我们考虑改变搜索顺序来剪掉更多的分支一个数的末位要是\(0\),那他肯定不是质数。于是我们先从所有数的......