#include <iostream>
#include <cmath>
using namespace std;
bool y_s(int a,int b,int c);
int main()//先遍历i,j.找到i,j,k,使得i = j*k,再利用y_s判断i = j*k这个式子中1~9每个数字是否正好出现一次,若是,则输出
{
    int i,j,k = 0;
    for (i = 1234;i < 9877;i++)//i最小为1234,最大为9876,缩小遍历范围
    {
        for (j = 2;j < sqrt(i);j++)//较小的因数j最小为2,最大也小于sqrt(i)
        {
            if (i % j == 0)//若j为i的因数 求出另外一个因数k
            {
                k = i / j;
                if (y_s(i,k,j) == true)//判断i = j*k这个式子中1~9每个数字是否正好出现一次,若是,则输出
                {
                    cout << i << " = " << j << " x " << k << endl;
                }
            }
       
        }
    }

}
bool y_s(int i,int j ,int k)//判断i = j*k这个式子中1~9每个数字是否正好出现一次
{
    int counter [10] = {0};//用于存储式子中三个数1~9各个数字的出现次数 counter[1]即存储1的出现次数
    while(i > 0)
    {
        counter[i % 10]++;//从最后一位位开始读取数字,使该数字的出现次数+1
    i /= 10;//舍弃读取的位上的数字
    }//当i的每位数都被存入counter后 i=0 循环中止
    while(j > 0)//同上
    {
            counter[j % 10]++;
            j /= 10;
    }
    while(k > 0)//同上
    {
            counter[k % 10]++;
            k /= 10;
    }
    for (int i = 1;i < 10;i++)//当1~9任何一个数字出现次数不为1的时候返回false
    {
        if (counter[i] != 1) return false;
    }
    return counter[0] == 0;//避免数字0的出现
}