(test2的列表里有一个case算错了,但是列表太大也不知道是那个错了。)暴力求解:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h>
#include <math.h>
void form_print(int is_yes, int x, int y)
{
if(is_yes)
{
printf("YES\n");
printf("%d %d %d\n",x,y,x+y);
}
else
{
printf("NO\n");
}
}
void func(unsigned int A, unsigned int B)
{
unsigned int a = 0, b = 0;
unsigned int a_max = 100000000/A;
unsigned int ab_max = 100000000/(A*B);
for(a = 1; a <= a_max; a++)
{
for(b = a+1; b <= a_max-1; b++)
{
if(a+b > a_max || a+b > ab_max)
{
form_print(0,0,0);
return;
}
if((a+b)%B == 0)
{
form_print(1,a*A,b*A);
return;
}
}
}
}
int main(void)
{
int loop_time = 0;
char str_tmp[256] = {0};
scanf("%s",str_tmp);
loop_time = atoi(str_tmp);
while(loop_time>0)
{
unsigned int A = 0, B = 0;
char str_num[8] = {0};
scanf("%s",str_num);
A = (unsigned int)atoi(str_num);
memset(str_num,0,8);
scanf("%s",str_num);
B = (unsigned int)atoi(str_num);
func(A, B);
loop_time--;
}
return 0;
}