UVa 11752 The Super Powers(数学)
2015-02-04 20:58
337 查看
设一个数为x=a^k,如果k是合数,k=m*n,那么x=(a^m)^n=(a^n)^m,这样这个数就是超级幂了。
首先1是答案,然后底数从2开始循环,指数最多是64,所以先扫一遍64以下的合数。底数的范围是65536,因为2以上的合数最小是4,65536^4已经超过最大值了。这样一个二重循环,把2到65536的每个数的合数次幂都加到答案里。
显然这些答案是有重复的,去重两种方法:
1.头文件<algorithm>中的unique函数
用法:1.先排序 2.unique(容器·起始地址,结束地址)..
这个函数必须作用于有序的序列,重复的元素并不删除,而是放到有序序列的后面。函数返回的是有序序列末地址的下一个位置。
和sort一样可以引入自定的比较函数,写法:
bool myfunction (int i, int j) {
return (i==j);
}
2.使用stl中的set:
set是自带去重和排序的,所以直接往里面insert就行了。遍历set要用迭代器,定义方法:set <数据类型>:: iterator p;
set也可以重载比较规则,但是规则要写成类的形式。如:
struct link_struct
{
int link_id;
int link_cost;
……
}
class link_compare
{
public:
bool link_compare::operator() (cost link_struct* first_link, cost link_struct* second_link)
{
return(first_link-> link_id < second_link-> link_id);
}
}
std::set <link_struct* , link_compare> set_link;
首先1是答案,然后底数从2开始循环,指数最多是64,所以先扫一遍64以下的合数。底数的范围是65536,因为2以上的合数最小是4,65536^4已经超过最大值了。这样一个二重循环,把2到65536的每个数的合数次幂都加到答案里。
显然这些答案是有重复的,去重两种方法:
1.头文件<algorithm>中的unique函数
用法:1.先排序 2.unique(容器·起始地址,结束地址)..
这个函数必须作用于有序的序列,重复的元素并不删除,而是放到有序序列的后面。函数返回的是有序序列末地址的下一个位置。
和sort一样可以引入自定的比较函数,写法:
bool myfunction (int i, int j) {
return (i==j);
}
2.使用stl中的set:
set是自带去重和排序的,所以直接往里面insert就行了。遍历set要用迭代器,定义方法:set <数据类型>:: iterator p;
set也可以重载比较规则,但是规则要写成类的形式。如:
struct link_struct
{
int link_id;
int link_cost;
……
}
class link_compare
{
public:
bool link_compare::operator() (cost link_struct* first_link, cost link_struct* second_link)
{
return(first_link-> link_id < second_link-> link_id);
}
}
std::set <link_struct* , link_compare> set_link;
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #include <algorithm> #include <set> #define LL unsigned long long LL pri[30000]; bool vis[70]; set <LL> res; int main(){ LL Max=0; for(int i=0;i<=63;i++){ Max+=(1ull<<i); } for(int i=2;i*i<=64;i++){ if(!vis[i]){ for(int j=i*i;j<=64;j+=i){ vis[j]=1; } } } int pn=0; int num=0; res.insert(1); for(int i=2;i<=65536;i++){ LL tmp=i; for(int j=1;j<=64;j++){ if(vis[j]){ res.insert(tmp); } if(tmp>Max/i) break; else tmp*=i; } } set<LL> :: iterator p; for(p=res.begin();p!=res.end();p++){ printf("%llu\n",*p); } return 0; }
相关文章推荐
- UVa 11752 - The Super Powers 数学
- UVA 11752 The Super Powers —— 数学与幂
- Uva 11752 The Super Powers 解题报告(数学)
- UVa 11752 The Super Powers (数学)
- 【数论 && 找规律】UVA 11752 The Super Powers
- uva 11752 - The Super Powers(数论+枚举技巧)
- UVA 11752 The Super Powers【超级幂】
- UVA 11752 The Super Powers 超级幂
- UVA-11752 The Super Powers
- UVA 11752 The Super Powers【超级幂】
- UVA11752-The Super Powers(素数表+log)
- UVA 11752 The Super Powers
- uva 11752 - The Super Powers
- The Super Powers UVA - 11752 (素数分解)
- UVa 11752 (素数筛选 快速幂) The Super Powers
- (UVA - 11752)The Super Powers (set判重,合数)
- UVA11752 The Super Powers【超级幂+暴力+数论】
- UVA11752 The Super Powers
- uva 11752 The Super Powers
- UVA 11752 - The Super Powers (数论)