POJ 1777 mason素数
题目大意:
给定数列 a1 , a2 , ... , an
希望找到一个 N = sigma(ai^ki) , (0<=ki<10) ,ki可随自己定为什么
只要保证N的因子和可以表示为 2^t的形式 , 输出t , 找不到就输出 NO
关于梅森素数,有一个重要的定理:“一个数能够写成几个不重复的梅森素数的乘积” 等价于 “这个数的约数和是2的幂次”,但是不能重复,比如说3是梅森素数,9就不满足约数和为2的幂。
还有一个重要内容就是,N的约数和幂次是可以直接由构成它的梅森素数的来源幂次相加而得的。
“一个数能够写成几个不重复的梅森素数的乘积” 等价于 “这个数的约数和是2的幂次” 因为这两个概念是充分必要的
那么就说明在这里要找到一个N表示为几个梅森素数的乘积,那么很明显,这里的ki只能是 0或者1 , 因为只要乘方了,那么必然那个数要么无法用梅森素数的乘积表示
要么乘积中存在重复的梅森素数
这里数字小于 2^31 , 在这个范围内只有 8个梅森素数
一个个枚举跑一遍就行了,最后结合得到答案,可以利用简单的dp背包的思想
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <iostream>
#include <set>
using namespace std;
#define pii pair<int,int>
const int p[] = {,,,,,,,}; //mason数的p的位置,表示为2^p-1
int mason[] , len[(<<)] , rec[(<<)] , tot;
bool vis[(<<)];
set<int> st; int Mason(int b){return (<<b)-;} void get_mason(){for(int i= ; i< ; i++)mason[i] = Mason(p[i]);} void init()
{
int all = (<<);
for(int i= ; i<all ; i++){
int t = ;
for(int j= ; j< ; j++)
if(i&(<<j)) t+=p[j];
len[i] = t;
}
} int ok(int x)
{
int cur = ;
for(int i= ; i< ; i++){
if(x%mason[i]==){
x /= mason[i];
cur|=(<<i);
}
}
if(x>) cur = ;
return cur;
} int main()
{
// freopen("a.in" , "r" , stdin);
get_mason();
init();
int n , a;
while(~scanf("%d" , &n)){
st.clear();
for(int i= ; i<n ; i++){
scanf("%d" , &a);
int state = ok(a);
if(state) st.insert(state);
} memset(vis , , sizeof(vis));
tot = ;
set<int>::iterator it=st.begin();
for( ; it!=st.end() ; it++) rec[tot++] = *it;
int all = (<<);
vis[] = true;
for(int i= ; i<tot ; i++){
for(int j=all- ; j>=rec[i] ; j--)
if((rec[i]&j) == rec[i]) vis[j] = vis[j-rec[i]] | vis[j];
}
int ret = ;
for(int j= ; j<all ; j++)
if(vis[j]) ret = max(ret , len[j]);
if(ret) printf("%d\n" , ret);
else puts("NO");
}
return ;
}
POJ 1777 mason素数的更多相关文章
- POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]
传送门:http://poj.org/problem?id=1845 大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有 ...
- POJ 1811 大素数判断
数据范围很大,用米勒罗宾测试和Pollard_Rho法可以分解大数. 模板在代码中 O.O #include <iostream> #include <cstdio> #inc ...
- poj 2262【素数表的应用---判断素数】【哈希】
Goldbach's Conjecture Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35214 Accepted: ...
- poj 2689 巧妙地运用素数筛选
称号: 给出一个区间[L,R]求在该区间内的素数最短,最长距离. (R < 2 * 10^9 , R - L <= 10 ^ 6) 由数论知识可得一个数的因子可在开根号内得到. 所以,我们 ...
- POJ - 3126 bfs + 素数筛法 [kuangbin带你飞]专题一
题意:给定两个四位素数作为终点和起点,每次可以改变起点数的某一位,且改变后的数仍然是素数,问是否可能变换成终点数字? 思路:bfs搜索,每次改变四位数中的某一位.素数打表方便判断新生成的数是否是素数. ...
- poj 1811 随机素数和大数分解(模板)
Sample Input 2 5 10 Sample Output Prime 2 模板学习: 判断是否是素数,数据很大,所以用miller,不是的话再用pollard rho分解 miller : ...
- poj 2689 (素数二次筛选)
Sample Input 2 17 14 17 Sample Output 2,3 are closest, 7,11 are most distant. There are no adjacent ...
- poj 2992 Divisors (素数打表+阶乘因子求解)
Divisors Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9617 Accepted: 2821 Descript ...
- POJ 1777
一道好题. 由算术基本定理,知: 那么,对于上式的每个因子值只能是2^M的形式.取第一个式子为例,通过分解因式出(1+p^2)=2^k知,a只能为1. 于是对于p只能是梅森素数.而且每个梅森素数只能出 ...
随机推荐
- 从linux系统mysql导出数据库
原文:http://blog.csdn.net/lifuxiangcaohui/article/details/50763674 1.MySQL数据库导出 /usr/local/mysql/bin/m ...
- Android布局_帧布局FrameLayout
一.FrameLayout布局概述 在这个布局中,所有的子元素都不能被指定放置的位置,他们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡 如下面的 ...
- Hbase之插入数据
/** * Created by similarface on 16/8/17. */ import org.apache.hadoop.conf.Configuration; import org. ...
- 安卓App热补丁动态修复技术介绍
版权声明:本文由johncz原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/169 来源:腾云阁 https://www.q ...
- OneProxy分库分表演示--楼方鑫
OneProxy分库分表演示 (杭州平民软件有限公司) OneProxy是为MySQL精心设计的数据访问层,可以为任何开发语言提供对MySQL数据库的智能数据路由功能,比如单点切换.读写分离.分库分表 ...
- linux笔记:linux常用命令-目录和文件处理命令
命令格式: 命令 [-选项] [参数] 例: ls -la /etc 注意:个别命令的使用不遵循此格式. 目录处理命令:ls(列目录) 更多选项: -h 以kb等利于人阅读的方式取代字节显示文件大小 ...
- NOIP 2014 普及组 T4 子矩阵
[题意] 已知:n,m,r,c,a[i][j] (1 ≤ n ≤ 16, 1 ≤ m ≤ 16,1 ≤ a[i][j] ≤1000,1 ≤ r ≤ n, 1 ≤ c ≤ m) 条件:矩阵的分值定义为每 ...
- SSM-配置文件标签随笔-概要
xmlns: xmlns是web.xml文件用到的命名空间xmlns:xsi是指web.xml遵守xml规范xsi:schemaLocation是指具体用到的schema资源
- selenium+python笔记3
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc:学习unittest的用法 注意setUp/setUpCl ...
- 《javascript高级程序设计》 第25章 新兴的API
25.1 requestAnimationFrame() 25.1.1 早期动画循环 25.1.2 循环间隔的问题 25.1.3 mozRequestAnimation-Frame.webkitReq ...