PAT乙级(5)分解因数 NowCoder数列
题目描述
所谓因子分解,就是把给定的正整数a,分解成若干个素数的乘积,即 a = a1 × a2 × a3 × … × an,并且 1 < a1 ≤ a2 ≤ a3 ≤ … ≤ an。其中a1、a2、…、an均为素数。先给出一个整数a,请输出分解后的因子。
输入描述:
输入包含多组数据,每组数据包含一个正整数a(2≤a≤1000000)。
输出描述:
对应每组数据,以“a = a1 * a2 * a3...”的形式输出因式分解后的结果。
输入例子:
10
18
输出例子:
10 = 2 * 5
18 = 2 * 3 * 3
思路:
每次输入一个数,从2开始判断,直到根号下 n 为止,当 n不等于 当前约数i 时, 进行判断,如果 n%i ==0 那就输出,然后 n = n/i 进行下一个判断.
比如 16
16 ! =4
16 % 2 ==0
16 =2 *
16/ 2 = 8
8!=2
…
到最后一步时
n = 4 /2 ;
此时 n =2
而 外层的 while 中 2!=2 false 退出 while
输出 最后一个 2
代码:
int main()
{
int n;
while (scanf_s("%d", &n) != EOF)
{
cout << "n = ";
int i ;
for (i = 2; i <= sqrt(n); i++)
{
while (n != i)
{
if (n % i == 0)
{
cout << i << " * ";
n = n / i;
}
else
{
break;
}
}
}
cout << n <<endl;
// 输出剩下的数
// 12 = 2 *2 *3 当3 %2 不等于0 时 跳出 for 输出3
}
return 0;
}
题目描述
NowCoder最近在研究一个数列:
F(0) = 7
F(1) = 11
F(n) = F(n-1) + F(n-2) (n≥2)
他称之为NowCoder数列。请你帮忙确认一下数列中第n个数是否是3的倍数。
输入描述:
输入包含多组数据。每组数据包含一个整数n,(0≤n≤1000000)。
输入描述:
对应每一组输入有一行输出。如果F(n)是3的倍数,则输出“Yes”;否则输出“No”。
输入例子:
0
1
2
3
4
5
输出例子:
No
No
Yes
No
No
No
思路:
首先自己写出这个数列的前几项,找规律
项数 0 1 2 3 4 5 6
数字 7 11 18 29 47 76 123
余数 1 2 0 2 2 1 0
(n-2)%4 ==0 时,F(n)能被3整除
#include <iostream>
using namespace std;
int main()
{
long long n;
while (scanf_s("%d", &n) != EOF)
{
int a = ((n - 2) % 4 == 0)?1:0;
if (a)
{
cout <<"Yes"<< endl;
}
else
{
cout << "No" << endl;
}
}
return 0;
}
// scanf 和 printf 更快
#include <iostream>
using namespace std;
int main()
{
int i;
while (scanf("%d", &i) != EOF)
{
if (i % 4 == 2)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}