LightOJ-1220 Mysterious Bacteria (质因数分解)
题目:
- 输入x,输出使x = b ^ p的最大的p
- 先质因数分解,res=gcd(c1,c2...cm)就是答案,注意如果n是负数,res只能是奇数,所以先按正数计算,再把结果一直除2到奇数。还要特判1。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
#include<vector>
#include<string>
#include<fstream>
using namespace std;
#define rep(i, a, n) for(int i = a; i <= n; ++ i)
#define per(i, a, n) for(int i = n; i >= a; -- i)
typedef long long ll;
const int N = 5e5 + 105;
const int mod = 998244353;
const double Pi = acos(- 1.0);
const int INF = 0x3f3f3f3f;
const int G = 3, Gi = 332748118;
ll qpow(ll a, ll b) { ll res = 1; while(b){ if(b) res = (res * a) % mod; a = (a * a) % mod; b >>= 1;} return res; }
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
//
int T;
ll n;
ll p[N], c[N];
ll m;
void div(ll x){
m = 0;
for(ll i = 2; i * i<= x; ++ i){
if(n % i == 0){
p[ ++ m] = i, c[m] = 0;
while(n % i == 0) n /= i, c[m] ++;
}
}
if(n > 1) p[++ m] = n, c[m] = 1;
}
int main()
{
scanf("%d",&T);
rep(Case,1,T) {
int flag = 0;
scanf("%lld",&n);
if(n == 1){
printf("Case %d: 1\n",Case);
continue;
}
if(n < 0){
n = -n;
flag = 1;
}
ll res = 0;
div(n);
if(m == 1) res = c[m];
else{
rep(i,1,m){
res = gcd(res, c[i]);
}
}
if(flag){
while(res % 2 == 0) res /= 2;
}
printf("Case %d: %lld\n",Case,res);
}
return 0;
}
分类:
ACM—数学
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 深度学习基础理论————CV中常用Backbone(Resnet/Unet/Vit系列/多模态系列等