蓝桥杯 混乘数字
问题描述
混乘数字的定义如下:
对于一个正整数 n
,如果存在正整数 a
和 b
,使得:
n = a × b
且 a
与 b
的十进制数位中每个数字出现的次数之和,与 n
中对应数字出现的次数相同,则称 n
为混乘数字。
示例
- 对于正整数
n = 126
,存在a = 6
,b = 21
,满足条件,因此126
是一个混乘数字。 - 对于正整数
n = 180225
,存在a = 225
,b = 801
,满足条件,因此180225
是一个混乘数字。
任务
请你帮助计算出 1 ∼ 1000000
(含)之间一共有多少个数字是混乘数字。
答案提交
这是一道结果填空题,你只需要算出结果后提交即可。
- 本题的结果为一个整数
- 在提交答案时只填写该整数
- 填写多余内容将无法得分
c++代码
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
bool mycan(int b, int c, vector<int> aa) {
vector<int> bb(10, 0), cc(10, 0);
if (b == 0) bb[0]++;
while(b > 0) {
bb[b % 10]++;
b /= 10;
}
if (c == 0) cc[0]++;
while(c > 0) {
cc[c % 10]++;
c /= 10;
}
for (int i = 0; i <= 9; i++) {
if (aa[i] != bb[i] + cc[i]) return false;
}
return true;
}
int main() {
/*
int ans = 0;
for (int i = 1; i <= 1000000; i++) {
int x = (int)sqrt(i);
vector<int> aa(10, 0);
if (i == 0) aa[0]++;
int a = i;
while(a > 0) {
aa[a % 10]++;
a /= 10;
}
for (int j = 1; j <= x; j++) {
if (i % j == 0 && mycan(j, i / j, aa)) {
ans++;
break;
}
}
}
cout << ans;
*/
cout << 590;
return 0;
}//by wqs