51nod 1061 最複雜的數 V2

2022-05-08 04:03:10 字數 2584 閱讀 3252

我是榜上最後一名= =

可能高精度用vector太慢了吧……什麼破題= =

這道題很簡單,如果高精度熟練**……也很簡單……然而,引數調了好久

我們發現質數的指數一定是,質數越小,指數越大,這個很顯然我不說了

所以我們就用個優先佇列bfs就好,佇列按數從小到大排序,每次把佇列的數取出來作為下乙個我們需要的數(也就是大小遞增且約數個數嚴格遞增),刪掉佇列首比這個數約數個數小的數

然後用這個數再擴充套件一層質數,注意剪枝吧。。

預處理好後回答詢問二分就行

質數大小開到85,搜出來的數的總量3810,在tle的邊緣試探……

vector寫高精度是真的很慢……

#include #include #include #include #include #include #include #include //#define ivorysi

#define eps 1e-8

#define mo 974711

#define pb push_back

#define mp make_pair

#define pii pair#define fi first

#define se second

#define maxn 100005

using namespace std;

typedef long long int64;

typedef unsigned int u32;

typedef double db;

const int64 mod = 1000000007;

const int base = 100000000,len = 8;

struct bignum

bignum operator = (int64 x) while(x);

return *this;

}bignum operator = (const string &str)

return *this;

}friend bignum operator * (const bignum &a,const bignum &b)

int t = i + b.v.size();

while(g)

} for(int i = c.v.size() - 1 ; i > 0 ; --i)

return c;

}friend bignum operator / (const bignum &a,const int x)

for(int i = c.v.size() - 1 ; i > 0 ; --i)

return c;

}friend bool operator < (const bignum &a,const bignum &b)

return false;

} }

friend bool operator == (const bignum &a,const bignum &b)

return true;

} }

friend bool operator > (const bignum &a,const bignum &b)

friend bool operator != (const bignum &a,const bignum &b)

friend bool operator <= (const bignum &a,const bignum &b)

friend bool operator >= (const bignum &a,const bignum &b)

void print()

}}n;int t;

bool nonprime[100005];

int prime[100005],cnt;

const int p = 85;

struct node

friend node operator * (const node &a,int x)

friend bool operator < (const node &a,const node &b)

friend bool operator == (const node &a,const node &b)

}ans[4005];

int tot = 0;

sets;

void solve()

s.insert(p * 1);

node k = *s.begin();

s.erase(s.begin());

for(int i = 2 ; i <= cnt ; ++i)

p = k;

}}int main()

} }

ios::sync_with_stdio(false);

solve();

cin>>t;

string str;

while(t--)

ans[l].num.print();

putchar(' ');

ans[l].val.print();

putchar('\n');

}return 0;

}

51nod 1061 最複雜的數V2

51nod 1061 求 1,n 中約數個數最多的數。n le 10 首先,答案一定是乙個反素數。什麼是反素數?乙個正整數 x 是反素數的充要條件是 1,x 1 中的整數的約數個數都小於 x 的約數個數。反素數有什麼性質?把乙個反素數分解成 p 1 p 2 p n 的形式,則 a 1 ge a 2 ...

51Nod 1060 最複雜的數

把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 100 第2 t 1行 t個數...

51nod 1060 最複雜的數

1060 最複雜的數 ural 1748 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個...