第一题 直角三角形判定
题目描述
给定三个正整数表示三角形的三条边,请判定它是否为直角三角形。
输入格式
第一行:三个整数 a,b 与 c
输出格式
若可以构成一个直角三角形,输出 Right Triangle
否则,输出 No
数据范围
1 ≤ a , b , c ≤ 1000 1\leq a, b, c\leq 1000 1≤a,b,c≤1000
样例输入1:
3 4 5
样例输出1:
Right Triangle
样例输入2:
3 3 3
样例输出2:
NO
分析
简单的分支结构判断,先将最大值交换到 c c c 中,再用勾股定理判断就行了。
#include <bits/stdc++.h>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b >> c;
if (a > b) swap(a, b);
if (b > c) swap(b, c);
if (a * a + b * b == c * c)
cout << "Right Triangle" << endl;
else
cout << "No" << endl;
return 0;
}
第二题 因子分解
题目描述
给定一个正整数 nn,请将它分解为素数的乘积。
例如 60 = 2 × 2 × 3 × 5 60=2\times2\times3\times5 60=2×2×3×5
输入格式
单个整数表示 n
输出格式
若干整数表示 n 的素因子,按照从小到大的顺序输出。
数据范围
2 ≤ n ≤ 1 , 000 , 000 , 000 2\leq n\leq 1,000,000,000 2≤n≤1,000,000,000
样例输入1:
60
样例输出1:
2 2 3 5
样例输入2:
3
样例输出2:
3
问题分析
- 考虑枚举 n n n 的因子,用 n n n 除它,直到不能整除,这样找到的因子一定是素因子。
for (int i = 2; i <= n; ++i)
while (n % i == 0){
cout << i << " ";
n /= i;
}
算法是 O ( n ) O(n) O(n),超时。
- 结论:整数 n 大于 n \sqrt n n 的素因子可能有