編程算法 - 最小能被1至n整除的數 代碼(C)
最小能被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
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!