X数
题目描述
给定一个正整数 n n n,对 n n n 分解质因数。
设 n = p 1 × p 2 × p 3 × ⋯ × p x n = p_1 \times p_2 \times p_3 \times \dots \times p_x n=p1×p2×p3×⋯×px,其中 p i p_i pi 均为质数。
如果 p i p_i pi 均为奇数,则称 n n n 为 X X X 数。
现在,给出 n n n,请你判断 n n n 是不是 X X X 数。
输入格式
第一行是一个整数,表示 n n n。
输出格式
输出一行一个字符串。
注意:如果
n
n
n 是
X
X
X 数,请输出 Y
,否则输出 N
。
样例 #1
样例输入 #1
2
样例输出 #1
N
样例 #2
样例输入 #2
3
样例输出 #2
Y
样例 #3
样例输入 #3
4
样例输出 #3
N
提示说明
数据范围
2 ≤ n ≤ 1 0 18 2 \leq n \leq 10^{18} 2≤n≤1018。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n;
cin>>n;
ll op=0;
for(ll i=2;i<=n/i;i++)
{
//若i非质数,则它的因子一定在[2,sqrt(i)]内
//==> 轮到i去试除x时,它的因子已被除完
//==> i必为质数
if(n%i==0)// i 一定为x的质因子
{
if(i%2==0) op=1;
}
}
//若此时x>1,则代表x为质数,质数只能分解成它本身的1次方
if(n>1&&n%2==0) op=1;
if(!op) cout<<"Y"<<endl;
else cout<<"N"<<endl;
return 0;
}