所谓素数,是指恰好有2个约数的整数。因为n的约束都不超过n,所以只要检查2~n-1的所有整数是否整出n就能判定n是不是素数。在此,如果d是n的约数,那么n/d也是n的约数。由n=d×n/d可知min(d,n/d)<=




1.素数测试
给定一个整数n,请判断n是不是素数。(1<=n<=10的9次方)
代码:
#include<iostream> #include<vector> #include<map> #include<algorithm> using namespace std; //假设输入都是正数 //素性测试 bool is_prime(int n) { for (int i = 2; i*i <= n; i++) { if (n%i == 0) return false; } return n != 1;//1是例外 } //约数枚举 vector<int> divisor(int n) { vector<int> res; for (int i = 1; i*i <= n; i++) { if (n%i == 0) { res.push_back(i); if (i != n / i) res.push_back(n / i); } } return res; } //整数分解,res中值为1的数下标相乘可得n map<int, int> prime_factor(int n) { map<int, int> res; for (int i = 2; i*i <= n; i++) { while (n%i == 0) { ++res[i]; n /= i; } } if (n != 1) res[n] = 1; return res; }
来源:https://blog.csdn.net/qq_45364953/article/details/100118080