手癢刷題系列: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(。。)
//*************************************************************************************************************************