// java 模板// 1、质数判定staticbooleanisPrime(int n){if(n <2){// 按照定义质数是大于 1 的整数returnfalse;}for(int i =2; i <= n/i; i ++){// 此处之所以是 i <= n/i ,是因为我们只需要遍历最小的部分约数即可,其他可以由最小的一部分约数构成if(n % i ==0){// 存在除了 1 和本身之外的约数returnfalse;}}returntrue;}// 2、朴素筛法/埃氏筛法staticintN=1000010;staticboolean[] st =newboolean[N];staticint primeNum;staticvoidgetPrimeNum(int n){for(int i =2; i <= n; i++){// 从2开始一直遍历到n-1的倍数if(st[i]==false){// 未被删掉,说明是质数
primeNum++;for(int j = i + i; j <=n; j += i){// 我们只需遍历质数的倍数就可以了,因为其他数都可以分解成质数
st[j]=true;}}}System.out.println(primeNum);}// 3、线性筛法staticvoidgetPrime(int n){for(int i =2; i <= n; i++){if(!st[i]){
primes[count++]= i;// 记录遍历过程中的质数}for(int j =0; j <= n/i; j++){// 筛掉其中质数构成的合数
st[primes[j]* i]=true;// 使用质因数prime来进行筛选// 当下面条件满足的时候,pjU一定是最小的质因子// 并且 pj 一定是 pj * i 的最小质因子if(i % primes[j]==0){// 当此处满足的时候,也就意味prime是i最小的质因数// 1、prime是从小到大存储的,因此一定是最小的// 2、当满足条件的时候,直接i的继续筛的过程结束,找到第一个质因数,则跳过,始终满足最小break;}}}System.out.println(count);}
// C++ 模板,由yxc实现// 1、试除法判定质数 —— 模板题 AcWing 866. 试除法判定质数boolis_prime(int x){if(x <2)returnfalse;for(int i =2; i <= x / i; i ++)if(x % i ==0)returnfalse;returntrue;}// 2、试除法分解质因数 —— 模板题 AcWing 867. 分解质因数voiddivide(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;
cout << endl;}// 3、朴素筛法求素数 —— 模板题 AcWing 868. 筛质数int primes[N], cnt;// primes[]存储所有素数bool st[N];// st[x]存储x是否被筛掉voidget_primes(int n){for(int i =2; i <= n; i ++){if(st[i])continue;
primes[cnt ++]= i;for(int j = i + i; j <= n; j += i)
st[j]=true;}}// 4、线性筛法求素数 —— 模板题 AcWing 868. 筛质数int primes[N], cnt;// primes[]存储所有素数bool st[N];// st[x]存储x是否被筛掉voidget_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;}}}
三、例题题解
1. 质数判定
// java题解实现importjava.util.*;importjava.io.*;publicclassMain{staticbooleanisPrime(int n){if(n <2){// 按照定义质数是大于 1 的整数returnfalse;}for(int i =2; i <= n/i; i ++){// 此处之所以是 i <= n/i ,是因为我们只需要遍历最小的部分约数即可,其他可以由最小的一部分约数构成if(n % i ==0){// 存在除了 1 和本身之外的约数returnfalse;}}returntrue;}publicstaticvoidmain(String[] args)throwsIOException{BufferedReader reader =newBufferedReader(newInputStreamReader(System.in));String[] str1 = reader.readLine().split(" ");int n =Integer.parseInt(str1[0]);for(int i =0; i < n; i++){String str2 = reader.readLine();int ai =Integer.parseInt(str2);if(isPrime(ai)){System.out.println("Yes");}else{System.out.println("No");}}}}
2.分解质因数
importjava.util.*;importjava.io.*;publicclassMain{staticvoidgetPrime(int n){for(int i =2; i <= n/i; i++){// 问题:我们不应该÷的是质因子嘛?为什么是遍历全部?// 我们从质因子2开始由小变大,由于n/i的存在,// 所有由质因子构成的非质因子,在已经被质因子除掉,无须再考虑,因此此处遍历始终是质因子。// 定理:质因数分解定理// 任何一个大于1的正整数都可以唯一的分解成质数的乘积。if(n % i ==0){int s =0;while(n % i ==0){
n /= i;// n多次÷i,则由质数构成的合数被干掉了
s++;// 记录质因子的质数(次数)}System.out.println(i +" "+ s);}}if(n >1){// 此处判断是因为上面遍历到最后的n/i的时候,可能没有除尽,还剩下最后一个质数,需要判断输出System.out.println(n +" "+1);}System.out.println();}publicstaticvoidmain(String[] args)throwsIOException{BufferedReader reader =newBufferedReader(newInputStreamReader(System.in));String str1 = reader.readLine();int n =Integer.parseInt(str1);for(int i =0; i < n; i++){String str2 = reader.readLine();int ai =Integer.parseInt(str2);getPrime(ai);}}}
3. 筛法——筛出1~n个质数(埃氏筛法与线性筛法)
// 埃氏筛法importjava.util.*;// 原理:假定有一个数p未被2~(p-1)中的数标记过,那么说明,不存在2~(p-1)中的任何一个数的倍数是p,// 也就是说p不是2~(p-1)中的任何数的倍数,也就是说2~(p-1)中不存在p的约数,因此,根据质数的定义可知:// p是质数.publicclassMain{staticintN=1000010;staticboolean[] st =newboolean[N];staticint primeNum;staticvoidgetPrimeNum(int n){for(int i =2; i <= n; i++){// 从2开始一直遍历到n-1的倍数if(st[i]==false){// 未被删掉,说明是质数
primeNum++;for(int j = i + i; j <=n; j += i){// 我们只需遍历质数的倍数就可以了,因为其他数都可以分解成质数
st[j]=true;}}}System.out.println(primeNum);}publicstaticvoidmain(String[] args){Scanner in =newScanner(System.in);int n = in.nextInt();getPrimeNum(n);}}// 线性筛法importjava.util.*;publicclassMain{staticintN=10000010;staticint[] primes =newint[N];staticboolean[] st =newboolean[N];staticint count =0;staticvoidgetPrime(int n){for(int i =2; i <= n; i++){if(!st[i]){
primes[count++]= i;// 记录遍历过程中的质数}for(int j =0; j <= n/i; j++){// 筛掉其中质数构成的合数
st[primes[j]* i]=true;// 使用质因数prime来进行筛选// 当下面条件满足的时候,pjU一定是最小的质因子// 并且 pj 一定是 pj * i 的最小质因子if(i % primes[j]==0){// 当此处满足的时候,也就意味prime是i最小的质因数// 1、prime是从小到大存储的,因此一定是最小的// 2、当满足条件的时候,直接i的继续筛的过程结束,找到第一个质因数,则跳过,始终满足最小break;}}}System.out.println(count);}publicstaticvoidmain(String[] args){Scanner in =newScanner(System.in);int n = in.nextInt();getPrime(n);}}
npm i express #node后端框架npm i corsnpm i mysqlconst app require(express)();
const cors require(cors);
const port 5000;
const mysql require(mysql) //引入mysql 模块app.use(cors({}))const conn mysql.createConnection({user: root,password: qwertyuiop…
NOTICE: 这篇文章的框架条目来自《C代码整洁之道:C17可持续软件开发模式实践》,作者: [德] 斯提芬罗特。书籍原名"Clean C: Sustainable Software Development Patterns and Best Practices with C 17"。 文章目录 编码基本原则保持简单和直接…