PAT乙级(5)分解因数 NowCoder数列

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;
}
发布了96 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41852212/article/details/102176159