PrimesSum
CODE BY antovip123@gmail.comunknown
c_cpp
3 years ago
1.6 kB
1
Indexable
Never
/* Bài tập: Kiểm tra xem số n<10^9 có phân tích được tổng của các số nguyên tố khác nhau không? Nếu có ghi ra cách phân tích gồm các số hạng nguyên tố ở đầu nhỏ nhất có thế. Nếu không có in ra "invalid". CODE BY antovip123@gmail.com */ #include<bits/stdc++.h> std::vector<int> a; void primeArr(int n, std::vector<int> &a) { std::vector<bool> v(n); for(int i=1; i<n; i++) { v[i] = true; } for(int i=2; i<=n; i++) if(v[i]) { for(int j=2; j<=n/i; j++) v[i*j] = false; } for(int i=2; i<=n; i++) if(v[i]) a.push_back(i); } bool primeCheck(int n) { if(n<2) return false; for(int i=2; i<=sqrt(n); i++) if(n%i == 0) return false; return true; } bool check(int n, int i) { //std::cout<<a[i]<<' '; if(n<2) return false; if(primeCheck(n) && (n>a[i] || i == -1)) { if(i != -1) std::cout<<n<<'+'; return true; } for(int j = i+1; j<a.size(); j++) if(check(n-a[j], j)) { std::cout<<a[j]; if(j>0) std::cout<<'+'; else std::cout<<'\n'; return true; } //std::cout<<'\n'; return false; } int main() { int k = 100000; primeArr(k, a); // for(int i=0; i<a.size(); i++) // std::cout<<a[i]<<' '; int n; std::cin>>n; if(!check(n, -1)) std::cout<<"invalid"; else std::cout<<"valid"; return 0; }