1. 程式人生 > 實用技巧 >試題 歷屆試題 買不到的數目

試題 歷屆試題 買不到的數目

問題描述

小明開了一家糖果店。他別出心裁:把水果糖包成4顆一包和7顆一包的兩種。糖果不能拆包賣。

小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。

你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。大於17的任何數字都可以用4和7組合出來。

本題的要求就是在已知兩個包裝的數量時,求最大不能組合出的數字。

輸入格式

兩個正整數,表示每種包裝中糖的顆數(都不多於1000)

輸出格式

一個正整數,表示最大不能買到的糖數

樣例輸入1 4 7 樣例輸出1 17 樣例輸入2 3 5 樣例輸出2 7 題解: 1.觀察兩個數為互質數,開一個dp陣列,標誌dp[0]=1,dp[n]=1,dp[m]=1; 從1列舉到n*m(gcd=1,相當於lcm(n,m)),當dp[i-n]=1|dp[i-m]=1有dp[i]=1;比n*m大的數一定可以組合得到。 code:
#include<bits/stdc++.h>
using
namespace std; int dp[1000005]; int main(){ int n,m; cin>>n>>m; dp[0]=1;dp[n]=1;dp[m]=1; for(int i=1;i<=n*m;i++){ if(i>n&&dp[i-n]||i>m&&dp[i-m]){ dp[i]=1; } } for(int i=n*m;i>=1;i--){ if(!dp[i]){ cout
<<i<<endl; break; } } return 0; }

2.數論結論,擴充套件歐幾里得自然數a,b互質,則不能表示成ax+by(x,y為非負整數)的最大整數是ab-a-b.

簡單證明用反證法,假設ax+by=ab-a-b,有ab=an+bm;

ab是a的倍數,an是a的倍數,則bm需是a的倍數,只能是m是a的倍數;bm=bm'a>=ab,又a>1,b>1,矛盾。