日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

简单搜索(多位自幂数)+数列网站

發布時間:2025/4/9 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单搜索(多位自幂数)+数列网站 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:
我們定義n位自冪數為:
如果x是n位數,x的各位的n次方的也為x,那么x為n位自冪數
求n位自冪數有哪些,0< n <=19,x > 0,排序后輸出
時限3000ms。

解法1:打表
首先,如果拿到一個數列,可以先試試這個網站:OEIS,輸入數列串,就會返回通項公式同時給出表,可以以后直接打表用。

解法2:搜索
怎么搜索??
暴力枚舉n位?最差情況9^19種情況,會炸。時間復雜度鏈接
其實我們觀察,174和741,其實是一種東西,所以求解自冪數的關鍵是求一個數x中它每一位數字重復出現的個數,至于這些數字怎么排列其實沒關系,我們要做的就是枚舉各個數字重復出現的個數即可。

代碼如下:

#include<cstdio> #include<string.h> #include<algorithm> using namespace std; typedef long long ll; int n, a[20], f[20], cnt; ll ans[20];//快速冪 ll poww(int a, int b) {ll ans = 1, base = a;while (b != 0) {if (b & 1 != 0)ans *= base;base *= base;b >>= 1;}return ans; }int calc(ll sum) {ll t = sum;int num = 0;memset(f, 0, sizeof(f));while (t) {ll tmp = t % 10;t /= 10;f[tmp] ++;num++;}return num; }//數字比較大,在爆ll的邊緣試探,所以這里拿double檢測一下 //ps是填充到哪個數字了,hs是還能填充幾個數字 void dfs(int ps, int hs, ll sum, double dbsum) {if (ps == 9) {a[ps] = hs;sum += (ll)hs*poww(9, n);dbsum += (double)hs*poww(9, n);if (dbsum <= 1e19&&sum > 0) {if (calc(sum) == n) {bool flag = 1;for (int i = 0; i <= 9; i++) {if (f[i] != a[i])flag = 0;}if (flag)ans[cnt++] = sum;}}return;}for (int i = 0; i <= hs; i++) {a[ps] = i;dfs(ps + 1, hs - i, sum + (ll)i*poww(ps, n), dbsum + (double)i*poww(ps, n));} }int main() {scanf("%d", &n);memset(ans, 0, sizeof(ans)); cnt = 0;dfs(0, n, 0, 0);if (!cnt) { printf("-1\n"); }else {sort(ans, ans + cnt);for (int i = 0; i < cnt; i++) {printf("%lld ", ans[i]);}printf("\n");}return 0; }

轉載于:https://www.cnblogs.com/romaLzhih/p/9489819.html

總結

以上是生活随笔為你收集整理的简单搜索(多位自幂数)+数列网站的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。