编程算法 - 最小能被1至n整除的数 代码(C)
jopen
9年前
最小能被1至n整除的数 代码(C)
最小能被1至n整除的数, 就是1至n所有素数的乘积.
求1至n所有素数的方法, 合数最大的质数因子, 只能在sqrt(n)以内, 可以减少遍历的范围.
时间复杂度为O(n). O(sqrt(n)*sqrt(n)).
代码:
/* * main.cpp * * Created on: 2014.7.20 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <memory.h> #include <math.h> #include <iostream> #include <vector> using namespace std; void Primes (int n, vector<int>& vi) { if (n <= 2) return; bool* a = new bool[n+1]; for (int i=1; i<=n; i++) a[i] = true; for (int i=2; i<sqrt(n); i++) { for (int j=2; j*i<=n; j++) { a[i*j] = false; } } for (int i=1; i<=n; ++i) if (a[i]) vi.push_back(i); delete[] a; } int Division (int n) { vector<int> vi; Primes(n, vi); long long min = 1; for (size_t i=0; i<vi.size(); ++i) { min *= vi[i]; } return min; } int main(void) { int n = 13; int min = Division(n); cout << "min = " << min << endl; return 0; }
输出:
min = 30030
来自: http://blog.csdn.net//caroline_wendy/article/details/39432787