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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章