Andrew Stankevich Contest 10 D More Divisors 反素数
2016-09-13 11:31
288 查看
今天学了个新东西,反素数,感觉这玩意主要是套模板。
模板:http://www.cnblogs.com/tiankonguse/archive/2012/07/29/2613877.html
以下套用大牛的讲解。
反素数的定义:对于任何正整数
,其约数个数记为
,例如
,如果某个正整数
满足:对任意的正整
数
,都有
,那么称
为反素数。
从反素数的定义中可以看出两个性质:
(1)一个反素数的所有质因子必然是从2开始的连续若干个质数,因为反素数是保证约数个数为
的这个数
尽量小
(2)同样的道理,如果
,那么必有
代码:
模板:http://www.cnblogs.com/tiankonguse/archive/2012/07/29/2613877.html
以下套用大牛的讲解。
反素数的定义:对于任何正整数
,其约数个数记为
,例如
,如果某个正整数
满足:对任意的正整
数
,都有
,那么称
为反素数。
从反素数的定义中可以看出两个性质:
(1)一个反素数的所有质因子必然是从2开始的连续若干个质数,因为反素数是保证约数个数为
的这个数
尽量小
(2)同样的道理,如果
,那么必有
代码:
#include<bits/stdc++.h> #define MEM(a,x) memset(a,x,sizeof(a)); #define MEMINF(a) memset(a,0x3f,sizeof(a)); using namespace std; typedef long long LI; const int MAXN=205; const int INF=0x3f3f3f3f; const int MOD=1000000007; LI n; LI bestSum,bestNum; LI prim[15]={2,3,5,7,11,13,17,19,23,29,31,37,43,47}; void getNum(LI num,LI k,LI sum, LI limit) { if (num>n) return; if (sum>bestSum) { bestSum=sum; bestNum=num; } else if (sum==bestSum&&num<bestNum) { bestNum=num; } if (k>=13) return ; for (LI i=1,p=num; i<=limit; ++i) { if(p*prim[k]>n)break; p*=prim[k]; getNum(p,k+1,sum*(i+1),i); } } LI log2(LI n) { LI i=0; LI p=1; while (p<n) { p*=2; i++; } return i; } int main() { freopen("divisors.in","r",stdin); freopen("divisors.out","w",stdout); cin>>n; bestNum=n; bestSum=0; getNum(1,0,1,log2(n)); cout<<bestNum<<endl; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 用批处理解决数学问题的代码第1/4页
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析