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;
}