1. 程式人生 > >手癢刷題系列:3/2刷題記錄

手癢刷題系列:3/2刷題記錄

//*************************************************************************************************************************

第一題:

2520是可以被1到10中的每個數字除以沒有任何餘數的最小數字。

什麼是可以被1到20的所有數字整除的最小正數?

答案:

codes:

C++:

#include<iostream>
/*
按照倍數關係,在1-20內:
11,13,17,19
這四個數是10-20之間的質數,
1,2,3,5,7
這五個數是1-10之間的質數;
因此:這個 MIN_NUM 首先是必須被這幾個數整除的;
*/
#define SCALE 20
int main()
{
	long Test_Num = 1;
	int i = 2, j = 1;
	for (i; i < SCALE; i++) {
		j = 1;
		for (j; j < i; j++) {
			if (i%j == 0&&j!=1) {
				break;
			}
			if (j == i - 1) {
				Test_Num *= i;
			}
		}
	}//找出1-20中的質數的最小公倍數;
	std::cout << Test_Num << std::endl;
//找到了1-20所有質數的最小公倍數,只要按倍數相乘就能得到所求條件;
//現在剩下:4.6.8.9.12.14.15.16.18.20
//在現實中做的時候實際上是把非質數拆開,觀察是質數的多少倍,然後乘以倍數;
//在程式中還是以遍歷的方式快且容易想到;
	i = 2;
	for (i; i <=SCALE; i++) {
		if (((Test_Num%i) != 0)) {
			    j = 2;
				for (j; j<i; j++) {
					if ((i%j) == 0) {
						Test_Num = Test_Num * j;
						break;//這個break很關鍵,自己做的時候開始掉了break,會導致在i=8的時候多乘一個2;
					}
				}
		}
	}
	std::cout << Test_Num << std::endl;
	return 0;
}

JAVA(。。)

//*************************************************************************************************************************

第二題:

前十個自然數的平方和是,
12 + 22 + ... + 102 = 385
前十個自然數之和的平方是,
(1 + 2 + ... + 10)2 = 552 = 3025
因此前10個自然數的平方和與平方和的差值為3025 - 385 = 2640。
找出前100個自然數的平方和與平方和的差值。

答案:25164150

codes:

C++:

#include<iostream>
int main()
{
	long sum_1 = 0, sum_2 = 0;
	long long sum = 0;
	int i = 1;
	for (i; i <= 100; i++) {
		sum_1 += (i*i);
	}
	//std::cout << sum_1 <<std::endl;
	i = 1;
	for (i; i <= 100; i++) {
		sum_2 += i;
	}
	sum = (sum_2*sum_2);
	//std::cout << sum << std::endl;
	std::cout << sum - sum_1 << std::endl;
	return 0;
}

JAVA(。)

//*************************************************************************************************************************

第三題:

通過列出前六個素數:2,3,5,7,11和13,我們可以看到第六個素數是13。

什麼是第10001號素數?

答案:104743

CODES:

C++

#include<iostream>
int Is_Prime_Num(long num);
int main()
{
	int cnt = 0,i=0;
	long num = 2, Prime_Num = 0;;
	while (cnt <10001) {
		//std::cout << num << std::endl;
		i = Is_Prime_Num(num);
		//std::cout << i << std::endl;
		if (i) {
			cnt++;
			Prime_Num = num;
		}
		num++;
	}
	std::cout << Prime_Num << std::endl;
	return 0;
}
int Is_Prime_Num(long num)
{
	int j = 2;//j從2開始很重要,要不然這個函式就會一直返回0,主程式就會陷入死迴圈
	for (j; j < num; j++) {
		if (num%j == 0) {//要是j從1開始,if條件判斷為:num%j==0&&j!=1;
			return 0;
		}
	}
	return 1;
}

JAVA(。。)

//*************************************************************************************************************************

第四題:

畢達哥拉斯三元組是一組三個自然數,a <b <c,為此,
a(2)+ b(2) = c(2)
例如,3(2) + 4(2) = 9 + 16 = 25 = 52。
有一個畢達哥拉斯三元組,其中a + b + c = 1000。

找到產品abc

答案:

CODES:

C++

#include<iostream>
int main()
{
	int a = 1, b = 1, c = 1;
	for (a; a <= 1000; a++) {
		b = 1;
		for (b; b <= 1000; b++) {
			c = 1;
			for (c; c <= 1000; c++) {
				if ((a*a) + (b*b) == (c*c) ) {
					if((c>b)&&(b>a)&&(a+b+c==1000))
					std::cout << a << b << c << std::endl;
				}
			}
		}
	}
	return 0;
}

JAVA(。。)

//*************************************************************************************************************************