[BZOJ 3629][JLOI2014]聪明的燕姿
生活随笔
收集整理的這篇文章主要介紹了
[BZOJ 3629][JLOI2014]聪明的燕姿
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
傳送門
\(\color{green}{solution}\)
爆搜題
/**************************************************************Problem: 3629User: MiEcokuLanguage: C++Result: AcceptedTime:164 msMemory:2468 kb ****************************************************************/#include <bits/stdc++.h> using namespace std;typedef long long ll;const int maxn = 100010;int t, cnt, n, ans[maxn], prim[maxn], book[maxn];bool isprim(int x) {for ( register int i = 1; prim[i]*prim[i] <= x; ++ i)if( x % prim[i] == 0) return false;return true; }inline void dfs(int l, int op, int now) {if( now == 1) { ans[++ cnt]= op; return;}if( now-1 >= prim[l] && isprim(now-1)) ans[++ cnt] = op * (now-1);for ( register int i = l; prim[i] * prim[i] <= now; ++ i) {for ( ll sum=1 + prim[i], p = prim[i]; sum <= now; p = p*prim[i], sum += p)if( !(now%sum)) dfs(i+1, op*p, now/sum);} }int main() {for ( register int i = 2; i <= 1e5; ++ i) {if( !book[i]) prim[++ t] = i;for ( register int k = 1; k <= t && prim[k]*i <= 1e5; ++ k) {book[i * prim[k]] = 1;if( i % prim[k] == 0) break;}}while ( ~scanf("%d", &n)) {cnt = 0; dfs(1, 1, n); sort(ans+1, ans+1+cnt);printf("%d\n", cnt);for ( register int i = 1; i <= cnt; ++ i) {printf(i == cnt ? "%d\n" : "%d ", ans[i]);}}return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/miecoku/p/9873147.html
總結(jié)
以上是生活随笔為你收集整理的[BZOJ 3629][JLOI2014]聪明的燕姿的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。