ARC116 A Odd vs Even (质因数分解,结论)
2024-10-12 09:49:02
题面
有
T
T
T 组数据,每次给出一个数
N
N
N ,问
N
N
N 的所有因数(包括
1
1
1 和
N
N
N)中奇因数个数和偶因数个数的关系(“>”,“<”,还是“=”)。
N
≤
1
e
18
,
T
≤
2
e
5
N\leq 1e18,T\leq 2e5
N≤1e18,T≤2e5.
题解
如果把一个数进行质因数分解,那么我们枚举每一个质因数的出现次数(幂的大小)就可以得到所有因数。
所以固定同一个质因数的出现次数后,对应的因数个数相等(都是其它质因数最高幂次+1的乘积)。
我们还知道一个正整数为偶数当且仅当质因数分解后有 2,一个正整数为奇数当且仅当质因数分解后没有 2 。
那么就可以推出一个结论了:如果
N
N
N 的质因数分解中 2 的幂次(这个可以用
N
N
N 不断除以 2 得到)大于等于 2,说明偶因数个数至少是奇因数的两倍,偶因数大于奇因数;如果等于 1,说明偶因数个数等于奇因数;否则等于 0,说明所有因数都是奇数。
由于只需要得到 2 的幂次与 1 的关系,不太需要直到它具体有多大,所以时间复杂度
O
(
T
)
O(T)
O(T).
CODE
#include<cstdio>
#define LL long long
LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f * x;
}
int main() {
int T = read();
while(T --) {
LL N = read();
int ct = 0;
while(!(N&1) && ct < 2) N >>= 1,ct ++;
if(ct == 0) printf("Odd\n");
else if(ct == 1) printf("Same\n");
else printf("Even\n");
}
return 0;
}
最新文章
- myBatis中 collection 或 association 联合查询 中column 传入多个参数值
- rsync错误日志
- AX3空Invoice明细问题
- 获取Dell,Lenovo电脑的保修期
- 18. 求交错序列前N项和
- touch ImageView
- C++11中的Lambda表达式
- UVa Online Judge 工具網站
- OC3-父类指针指向子类对象
- 实现html转Xml
- C#中的IO流操作(FileStream)
- CSS或者JS实现鼠标悬停显示另一元素
- 用golang写的生成文件md5sum,检验文件md5sum
- 背水一战 Windows 10 (39) - 控件(布局类): VariableSizedWrapGrid, Border, Viewbox, SplitView
- java-FFmpeg(一) 实现视频的转码和截图功能
- 【sklearn】数据预处理 sklearn.preprocessing
- react_app 项目开发 (8)_角色管理_用户管理----权限管理 ---- shouldComponentUpdate
- mysql命令大全用户管理相关命令
- java程序发布成exe等
- Angular待办事项应用3
热门文章
- 第2章 C++编程入门
- 【生成对抗网络学习 其一】经典GAN与其存在的问题和相关改进
- 开发工具-PowerShell下载地址
- 在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
- 使用React.js写一个类似单选框与复选框的功能
- vue按需引入第三方ui插件优化
- 编程技巧│提高 Javascript 代码效率的技巧
- VisionPro &#183; C# &#183; 界面显示视觉结果图像
- Docker 与 K8S学习笔记(二十五)—— Pod的各种调度策略(上)
- 基于springBoot项目如何配置多数据源