LightOJ - 1220 Mysterious Bacteria 唯一分解定理

2023-11-10 00:59

本文主要是介绍LightOJ - 1220 Mysterious Bacteria 唯一分解定理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mysterious Bacteria
题目描述
Dr. Mob has just discovered a Deathly Bacteria. He named it RC-01. RC-01 has a very strange reproduction system. RC-01 lives exactly x days. Now RC-01 produces exactly p new deadly Bacteria where x = bp (where b, p are integers). More generally, x is a perfect pth power. Given the lifetime x of a mother RC-01 you are to determine the maximum number of new RC-01 which can be produced by the mother RC-01.

输入
Input starts with an integer T (≤ 50), denoting the number of test cases.

Each case starts with a line containing an integer x. You can assume that x will have magnitude at least 2 and be within the range of a 32 bit signed integer.

输出
For each case, print the case number and the largest integer p such that x is a perfect pth power.

样例
Sample Input
3
17
1073741824
25
Sample Output
Case 1: 1
Case 2: 30
Case 3: 2
 

题意:x=b^p  给出x求出最大的p

分析:

唯一分解定理:

每一个大于1的正整数n都可以唯一地写成素数的乘积,在乘积中的素因子按照非降序排列,正整数n的分解式n=(p1^α1)*(p2^α2)*(p3^α3)* ....... *(pk^αk)称为n的标准分解式,其中p1,p2,p3......pk是素数,p1<p2<p3.....,且α1,α2,α3.......是正整数。

接下来,最小的p就为gcd(α1,α2,α3......αk),为什么呢?举两个个例子,

24 = 2^3 * 3^1,p应该是gcd(3, 1) = 1,即24 = 24^1,想一想是不是只能把2^3合并到3^1次方里来

324 = 3^4*2^2,p应该是gcd(4, 2) = 2,即324 = 18^2,想一想是不是把3^4合并到2^2次方里来

本题有一个坑点:就是x可能为负数,如果x为负数的话,x = b^q, q必须使奇数,因为偶数的偶数次方大于正数,所以将x转化为正数求得的解如果是偶数的话必须将其一直除2转化为奇数

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<stack>
#include<map>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
#define kuaidian ios::sync_with_stdio(0);using namespace std;
typedef long long ll;     
const ll N = 5e4+7;
int fac[N],flag;   
ll prime[N] = {0},num_prime = 0;  //prime存放着小于N的素数   
int isNotPrime[N] = {1, 1};        // isNotPrime[i]如果i不是素数,则为1 
int Prime()    
{     for(ll  i = 2 ; i < N ; i ++)       {            if(! isNotPrime[i])               prime[num_prime ++]=i;  //无论是否为素数都会下来     for(ll  j = 0 ; j < num_prime && i * prime[j] <  N ; j ++){               isNotPrime[i * prime[j]] = 1;  if( !(i % prime[j] ) )  //遇到i最小的素数因子//关键处1                  break;           }        }        return 0;   
}  int gcd(int a, int b) {return b == 0 ? a : gcd(b, a%b);
}//与素数筛选一起用的质数分解
///将x分解为式n=(p1^α1)*(p2^α2)*(p3^α3)* ....... *(pk^αk)
///fac求解保存底数p1或者指数α1
void Dec(ll x)
{int cnt = 0;for(int i=0; prime[i]*prime[i]<=x&&i<num_prime; i++){if(x%prime[i]==0){int num=0;while(x%prime[i]==0){num++;x /= prime[i];} fac[cnt++] =num;///如果fac保存的为底数因子(num无用),改为fac[cnt++]=x;}if(x==1) break;}if(x > 1)fac[cnt++] = 1;     ///如果fac保存的为底数因子,改为fac[cnt++]=xll ans=0;for(int i = 0; i < cnt; ++i) {ans = gcd(ans, fac[i]);}if(!flag) while(ans % 2 == 0) ans /= 2;cout << ans << endl;
}int main() {int T;Prime();cin >> T;ll n;for(int tt = 1; tt <= T; ++tt) {cin >> n;if(n > 0) flag = 1;else { flag = 0;n *= (-1);}cout << "Case " << tt << ": ";Dec(n);}return 0;
}

 

这篇关于LightOJ - 1220 Mysterious Bacteria 唯一分解定理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379494

相关文章

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

集群环境下为雪花算法生成全局唯一机器ID策略

雪花算法是生成数据id非常好的一种方式,机器id是雪花算法不可分割的一部分。但是对于集群应用,让不同的机器自动产生不同的机器id传统做法就是针对每一个机器进行单独配置,但这样做不利于集群水平扩展,且操作过程非常复杂,所以每一个机器在集群环境下是一个头疼的问题。现在借助spring+redis,给出一种策略,支持随意水平扩展,肥肠好用。 大致策略分为4步: 1.对机器ip进行hash,对某一个(大于

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩 目录 前言 一、特征值分解 二、应用特征值分解对图片进行压缩 三、矩阵的奇异值分解 四、应用奇异值分解对图片进行压缩 五、MATLAB仿真代码 前言         学习了特征值分解和奇异值分解相关知识,发现其可以用于图片压缩,但网上没有找到相应代码,本文在学习了之后编写出了图片压缩的代码,发现奇异值分

CPC23三 K.(Lucas定理)

K.喵喵的神·数 Time Limit: 1 Sec Memory Limit: 128 MB Description 喵喵对组合数比较感兴趣,并且对计算组合数非常在行。同时为了追求有后宫的素质的生活,喵喵每天都要研究质数。 我们先来复习一下什么叫做组合数。对于正整数P、T 然后我们再来复习一下什么叫质数。质数就是素数,如果说正整数N的约数只有1和它本身,N

前端vue项目生成唯一的uuid

一、使用步骤 1.安装uuid 代码如下(示例): npm install -S uuid 2.在需要使用uuid的.vue文件中生成并存储uuid 代码如下(示例): import { v4 as uuidv4 } from 'uuid';mounted () {let sid=''if(localStorage.getItem('sid')){sid=localStorage.g

连分数因子分解法——C语言实现

参考网址:连分数分解法寻找整数的因子(Python)-CSDN博客 大数运算:C语言实现 大数运算 加减乘除模运算 超详细_64编程 加减乘除取模 复杂运算-CSDN博客 ‌连分数因子分解法‌是一种用于大整数因子分解的算法,它是计算数论中的一个重要方法。连分数因子分解法通过寻找x2≡y2 (mod p)x2≡y2 (mod p)的形式来分解N。具体来说,这种方法涉及到计算N的简单连分数展开,并

时序预测|变分模态分解-双向时域卷积-双向门控单元-注意力机制多变量时间序列预测VMD-BiTCN-BiGRU-Attention

时序预测|变分模态分解-双向时域卷积-双向门控单元-注意力机制多变量时间序列预测VMD-BiTCN-BiGRU-Attention 文章目录 一、基本原理1. 变分模态分解(VMD)2. 双向时域卷积(BiTCN)3. 双向门控单元(BiGRU)4. 注意力机制(Attention)总结流程 二、实验结果三、核心代码四、代码获取五、总结 时序预测|变分模态分解-双向时域卷积

《机器学习》 基于SVD的矩阵分解 推导、案例实现

目录 一、SVD奇异值分解 1、什么是SVD 2、SVD的应用         1)数据降维         2)推荐算法         3)自然语言处理 3、核心         1)什么是酉矩阵         2)什么是对角矩阵 4、分解过程 二、推导 1、如何求解这三个矩阵         1)已知:          2)根据酉矩阵的特点即可得出:

量化交易面试:什么是中心极限定理?

中心极限定理(Central Limit Theorem, CLT)是概率论和统计学中的一个重要定理,它描述了在一定条件下,独立随机变量的和的分布趋向于正态分布的性质。这个定理在量化交易和金融分析中具有重要的应用价值。以下是对中心极限定理的详细解释: 基本概念: 中心极限定理指出,当我们从一个具有任意分布的总体中抽取足够大的样本时,样本均值的分布将近似于正态分布,无论原始总体的分布是什么样的。