Tìm số nguyên dương N nhỏ nhất sao cho N chia hết cho 99 và trong biểu diễn thập phân của N không chứa số 9,
Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.
#include <iostream>
#include <vector>
using namespace std;
vector<int> primeFactors(int n) {
vector<int> factors;
for (int i = 2; i * i <= n; i++) {
while (n % i == 0) {
factors.push_back(i);
n /= i;
}
}
if (n > 1) factors.push_back(n);
return factors;
}
int main() {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
vector<int> factors = primeFactors(k);
int sum = accumulate(a.begin(), a.end(), 0);
vector<vector<bool>> dp(n+1, vector<bool>(sum+1, false));
dp[0][0] = true;
for (int i = 1; i <= n; ++i) {
for (int j = 0; j <= sum; ++j) {
dp[i][j] = dp[i-1][j];
if (j >= a[i-1]) {
for (int factor : factors) {
if (a[i-1] % factor == 0) {
dp[i][j] = dp[i][j] || dp[i-1][j-a[i-1]];
break;
}
}
}
}
}
for (int j = 0; j <= sum; ++j) {
if (dp[n][j]) {
cout << j << endl;
break;
}
}
return 0;
}
\(^∗\)Xét \(n=2011\)thì \(S\left(2011\right)=2011^2-2011.2011+2010=2010\)(vô lí)
\(^∗\)Xét \(n>2011\)thì \(n-2011>0\)do đó \(S\left(n\right)=n\left(n-2011\right)+2010>n\left(n-2011\right)>n\)(vô lí do \(S\left(n\right)\le n\))
* Xét \(1\le n\le2010\)thì \(\left(n-1\right)\left(n-2010\right)\le0\Leftrightarrow n^2-2011n+2010\le0\)hay \(S\left(n\right)\le0\)(vô lí do \(S\left(n\right)>0\))
Vậy không tồn tại số nguyên dương n thỏa mãn đề bài
dễ thấy để S(n) và S(n+1) đều chia hết cho 1 số thì đuôi của n kết thúc bằng các số 9.
giả sử n có x số 9 cuối(ta tìm x nhỏ nhất)
khi đó n có dạng a 99...9 (x số 9)
=> n+1=b00...0 ( x+1 số 0) với b=a+1
do S(n) ≡ S(n+1) (mod 7) => a+9x ≡ b (mod 7) => 9x ≡ 1 (mod 7)
=> x=4
=> n=a9999
mà S(n) chia hết cho 7 => a=6 => n=69999 là nhỏ nhất thỏa mãn :D