Irrelevant Elements UVA

来源:互联网 发布:哪个炒股软件最好 编辑:程序博客网 时间:2024/05/17 03:03

按照紫书的思路,先求出所有的素数因子,然后递推求解并且记录,最后判断打印最终的结果即可,具体实现见如下代码:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>#include<functional>using namespace std;int n, m;vector<int> prime;void getPrime(){int t = floor(sqrt(m)+0.5);int m2 = m;for (int i = 2; i <= t; i++){if (m2%i == 0){prime.push_back(i);while (m2%i == 0) m2 = m2 / i;}}if (m2 > 1) prime.push_back(m2);}int main(){while (cin >> n >> m){prime.clear();n--;getPrime();    //C(n,k)=C(n,k-1)*(n-k+1)/kint flag[100010];memset(flag, 0, sizeof(flag));for (int i = 0; i < prime.size(); i++){int fac = prime[i];int count_e = 0;int min_e = 0;int m1 = m;while (m1%fac == 0){m1 = m1 / fac;min_e++;}for (int k = 1; k < n; k++){int up = n - k + 1;int down = k;while (up%fac == 0){up = up / fac;count_e++;}while (down%fac == 0){down = down / fac;count_e--;}if (count_e < min_e){flag[k] = 1;}}}vector<int> res;for (int i = 1; i < n; i++){if (!flag[i]) res.push_back(i+1);}cout << res.size() << endl;if (!res.empty()){cout << res[0];for (int i = 1; i < res.size(); i++){cout << " " << res[i];}}cout << endl;}return 0;}

原创粉丝点击