為什麼1小時有60分鐘,而不是100分鐘呢?這是歷史上的習慣導致。 但也並非純粹的偶然:60是個優秀的數字,它的因子比較多。 事實上,它是1至6的每個數字的倍數。即1,2,3,4,5,6都是可以除盡60。
我們希望尋找到能除盡1至n的的每個數字的最小整數。
不要小看這個數字,它可能十分大,比如n=100, 則該數為: 69720375229712477164533808935312303556800
請編寫程式,實現對使用者輸入的 n (n<100)求出1~n的最小公倍數。
例如: 使用者輸入: 6 程式輸出: 60
使用者輸入: 10 程式輸出: 2520
要求考生把所有函式寫在乙個檔案中。除錯好後,存入與考生資料夾下對應題號的「解答.txt」中即可。 相關的工程檔案不要拷入。 對於程式設計題目,要求選手給出的解答完全符合ansi c標準,不能使用c++特性; 不能使用諸如繪圖、中斷呼叫等硬體相關或作業系統相關的api。
本題滿分:19分
共4個用例:
(2分) 輸入: 3 輸出: 6
(3分) 輸入: 16 輸出: 720720
(5分) 輸入: 25 輸出: 26771144400
(9分) 輸入: 77 輸出: 410555180440430163438262940577600
最小公倍數就是所有質數的相應冪的積
比如n=10
小於10的質數有2,3,5,7
對應的最大冪是:3,2,1,1
則最小公倍數是:2^3x3^2x5^1x7^1 = 2520
1 #include 2 #include 3 #include 4using
namespace
std;56
int a[50] = ;//
存素數
7bool vis[100];8
int b[50] = ;//
存冪次 910
void init_prim()//
求小於100的所有素數存入陣列a
1123
int t = 0;24
for(k=0; k<100; k++)
25if(!vis[k])
26 a[t++] =k;27}
2829
intmain()
3052
else
if(pow((double)a[i],(double)j) == (double)n)//
必須分開
5357
} 58}
59//
不知道是不是pow函式的問題,把ans定義為int得出的結果出問題,double就對了
60double ans = 1;61
for(k=0; k)
6266 cout<<(int)ans<68return
0; 69}
7071
//該程式 到25時就溢位,ans換位long long前幾個就錯誤啦,此時需要把pow函式換掉
下面是大數版程式(提交通過)
1 #include 2 #include 3 #include 4 #include 5using
namespace
std;67
const
int n = 105;8
intn;
9int a[n][50
];10
int b[n] = ;
1112
void
multiply()
13 32}
33}34}
3536
void printdata(int
n)37
4748
intmain()
4960
//for(i=0; i<100; i++)
61//
cout<62
//while(1);
63multiply();
6465
while(cin>>n)
6673
74printdata(n);75}
76return0;
77}78
nyoj 517 最小公倍數
最小公倍數 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 為什麼1小時有60分鐘,而不是100分鐘呢?這是歷史上的習慣導致。但也並非純粹的偶然 60是個優秀的數字,它的因子比較多。事實上,它是1至6的每個數字的倍數。即1,2,3,4,5,6都是可以除盡60。我們希望尋找到能...
NYOJ 517 最小公倍數 C C
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 為什麼1小時有60分鐘,而不是100分鐘呢?這是歷史上的習慣導致。但也並非純粹的偶然 60是個優秀的數字,它的因子比較多。事實上,它是1至6的每個數字的倍數。即1,2,3,4,5,6都是可以除盡60。我們希望尋找到能除盡1至n的...
藍橋杯 最大最小公倍數
最大的最小公倍數 time limit 1000 ms memory limit 32768 k total submit 265 71 users total accepted 63 51 users rating special judge no description 從小學我們就學過最小公倍...