LA2955 Vivian难题——梅森素数

题意

输入 $k$(1 \leq k \leq 100)个正整数 $p_1, p_2, ..., p_k$(1 < p_i < 2{31}),找出 $k$ 个非负整数 $e_i$ 使得 $N = \prod _{i=1}^k {p_i}^{e_i}$ 为 $2^x$,$x$ 为正整数。注意,由于 $x>0$,$e_i$ 不能全为0.如果无解输出NO,否则输出最大的 $x$。

分析

梅森数:$2^p-1$,指数 $p$ 是素数。常记为 $Mp$.

如果梅森数是素数,就称为梅森素数。

若 $2^n-1$ 是素数,则指数 $n$ 也是素数(假设 $n$ 是合数,$2^n-1$ 一定能被分解)

若 $n$ 是素数,$2^n-1$ 却未必是素数。

有一个重要的性质:“一个数能够写成 $n$ 个不重复的梅森素数的乘积” 等价于 "这个数的约数和是2的幂"。

例如,$2^3-1=7$,7的约数为1和7,$1+7 = 2^3$

必须是不重复的,$3 \times 3 = 9$,但9的约数1、3、6、9,和不是2的幂。

在题给的范围内,梅森素数只有8个。

 

代码

感觉爆搜就可以了,不会写

 

 

参考链接:

1. https://blog.csdn.net/miku23736748/article/details/52135932

2. https://blog.csdn.net/acm_cxlove/article/details/7860735

posted @ 2019-10-23 16:28  Rogn  阅读(334)  评论(0编辑  收藏  举报