蓝桥杯 算法提高 质因数2
2018-01-04 12:04
267 查看
因为质数范围写小了一直没有检查出来错误,很难受
ac代码如下
在阅览各个博主的题解时发现一个很棒的题解
转自http://blog.csdn.net/liuchuo/article/details/60867226
思路是就直接除,因为除过了前面的几个素数就不会被合数除,所以就不用筛选素数了,数学很强
ac代码如下
#include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; int n; vector<int> prime(32768,1); //素数数组的范围需要是题目中给的最大范围因为可能N就是素数 vector<int> ans; void initprime(){ for(int i=0;i<prime.size();i++){ for(int j=2;j<=sqrt(i);j++){ if(i%j==0){ prime[i]=0; break; } } } } void solve(int n){ while(n){ for(int i=2;i<=n;i++){//不知道为什么这里只能写i<=n,写i<=n/2之类的都会错,不过不改不影响ac if(n%i==0){ if(prime[i]){ ans.push_back(i); n/=i; if(n==1)n=0; } } } } sort(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++) cout<<ans[i]<<" "; cout<<endl; cout<<ans.size(); } int main() { int n; cin>>n; initprime(); solve(n); return 0; }
在阅览各个博主的题解时发现一个很棒的题解
转自http://blog.csdn.net/liuchuo/article/details/60867226
思路是就直接除,因为除过了前面的几个素数就不会被合数除,所以就不用筛选素数了,数学很强
#include <iostream> using namespace std; int main() { int n; cin >> n; int cnt = 0; while(n != 1) { for(int i = 2; i <= n; i++) { if(n % i == 0) { cout << i << " "; cnt++; n = n / i; break; } } } cout << endl << cnt; return 0; }
相关文章推荐
- 蓝桥杯 ADV-181 算法提高 质因数2
- 蓝桥杯 ADV-69 算法提高 质因数
- 【ShawnZhang】带你看蓝桥杯—— 算法提高 质因数2
- 蓝桥杯 ADV-181 算法提高 质因数2
- 蓝桥杯算法提高——拿糖果(数学+dp)
- 蓝桥杯-算法提高-周期字串
- 蓝桥杯-算法提高(ADV-143 扶老奶奶过街)
- 蓝桥杯 ADV-84 算法提高 图形输出
- 蓝桥杯 算法提高VIP 色盲的民主(Java解题)
- 蓝桥杯 ADV-91 算法提高 素数判断
- 蓝桥杯 ADV-132 算法提高 笨小猴
- 算法-蓝桥杯-算法提高 01背包(JAVA)
- 蓝桥杯 ADV-180 算法提高 陶陶摘苹果2
- 算法提高 质因数
- 蓝桥杯 算法提高 日期计算
- 蓝桥杯 算法提高 11-1实现strcmp函数
- 算法-蓝桥杯-算法提高 P0102 (JAVA)
- 蓝桥杯 算法提高 c++_ch04_02_修正版
- 蓝桥杯算法提高 矩阵乘法
- 蓝桥杯ADV-88——算法提高 输出正反三角形