2018京东笔试no.4 整数分解
题目描述:
小Q的数学老师给了小Q一个整数N,问小Q能否将N分解为两个整数X和Y相乘,并且满足X为奇数,Y为偶数,即能否找到奇数X和偶数Y满足X*Y=N
输入描述:
输入描述:
输入第一行包含一个正整数t(1<=t<=1000),表示测试样例数。
接下来的t行,每行一个正整数N(2<=N<=2^63),表示给出的N。保证N不是2的幂次
输出描述:
接下来的t行,每行一个正整数N(2<=N<=2^63),表示给出的N。保证N不是2的幂次
输出描述:
如果能找到这样的X,Y,则依次输出X,Y,如果有多解输出Y最小的那组解,以空格分隔,否则输出“NO”
示例:
输入:
2
10
5
输出:
5 2
NO
示例:
输入:
2
10
5
输出:
5 2
NO
参考程序:
//#include <bits/stdc++.h>
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<stdlib.h>
using namespace std;
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<stdlib.h>
using namespace std;
int main() {
int t;
scanf("%d", &t);
long long n, x, y;
while (t--) {
scanf("%lld", &n);
if (n & 1)
printf("N0\n"); //N是奇数则肯定不能被分解为奇数与偶数相乘
else {
for (y = 2; y <= n; y += 2) { //y是偶数,最小可能为2
if (n%y == 0 && (n / y) & 1) {
x = n / y;
break;
}
}
printf("%lld %lld\n", x, y);
}
}
return 0;
}
#京东##笔试题目#int t;
scanf("%d", &t);
long long n, x, y;
while (t--) {
scanf("%lld", &n);
if (n & 1)
printf("N0\n"); //N是奇数则肯定不能被分解为奇数与偶数相乘
else {
for (y = 2; y <= n; y += 2) { //y是偶数,最小可能为2
if (n%y == 0 && (n / y) & 1) {
x = n / y;
break;
}
}
printf("%lld %lld\n", x, y);
}
}
return 0;
}