uva11752 去重函式 unique

2021-06-25 16:30:18 字數 1246 閱讀 1888

題目:

求出所有小於2^64-1的super powers

乙個數n是super powers當 a^i=b^j=n

很顯然,super powers的冪指數一定是和數,素數篩選找出小於64的所有和數,然後列舉底數在2到1<<16範圍之內,因為最小合數4

另外·溢位判斷要注意ceil(64/(log(a)/log(2)))-1這是對於a這個底數而言,最高的不溢位的冪。

題目本身不難,主要是 去重函式的運用!

我也是醉了。。。

在stl中unique函式是乙個去重函式, unique的功能是去除相鄰的重複元素(只保留乙個),其實它並不真正把重複的元素刪除,

是把重複的元素移到後面去了

,然後依然儲存到了原陣列中,然後 返回去重後最後乙個元素的位址,因為unique去除的是相鄰的重複元素,所以一般用之前都會要排一下序。

所以,乙個unique()函式完成功能,還需要 sort()和erase()函式。 即:

sort(ans.begin(),ans.end());  //排序

vector::iterator end_unique =unique(ans.begin(),ans.end());//把重複的數放在陣列末尾

ans.erase(end_unique,ans.end()); // 真正的刪除操作

此題**:

#include #include#include#include#include#include#includeusing namespace std;

typedef unsigned long long ll;

bool p[65];

int num[105],pr[105],tot=0,cnt=0;

vectorans;

ll maxn=(((ll)1<<64)-1);

void prime()

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

if(p[i]) num[tot++]=i;

else pr[cnt++]=i;

// printf("tot=%d\n",tot);

// for(int i=0;i::iterator end_unique =unique(ans.begin(),ans.end());

ans.erase(end_unique,ans.end());

// printf("%d\n",ans.size());

for(int i=0;i

素篩優化 UVA 11752 超級冪

題目大意 超級冪 是至少兩個數的冪 輸出1 2 64 1 的所有超級冪 解題思路 首先想到肯定是用素數來篩選,但是不可能用素數來篩選可行解,比如 素數2,列舉2的冪,在進行比較,絕對超時 那我們只能將素數用於冪的選擇上也就是素數不選 但這樣仍然過不了,會越界 這裡可以使用兩種優化邊界處理方式 1 我...

unique 去重函式

unique 函式是乙個去重函式,stl中unique的函式 unique的功能是去除相鄰的重複元素 只保留乙個 還有乙個容易忽視的特性是它並不真正把重複的元素刪除。他是c 中的函式,所以標頭檔案要加 include,具體用法如下 int num 100 unique num,mun n 返回的是n...

unique 去重函式

unique 是c 標準庫函式裡面的函式,位於標頭檔案 include中,其功能是去除相鄰的重複元素 只保留乙個 所以使用前需要對陣列進行排序 該函式的乙個使用方法,對於長度為n陣列arr,unique arr,arr n arr返回的是去重後的陣列長度 那它是怎麼實現去重的呢?刪除?不是,它並沒有...