POJ1426 Find The Multiple

搜索专题

题目

不错的题,生生地把bfs变成了模拟bfs。。。或者说递推。。。

朴素做法

可以用搜索直接做。
既然是搜索,那么就从 1 开始 接着就是 10 和 11 ,对吧。
既然是bfs,那么就有一个搜索树。
这样地,

这里写图片描述
额,水印好丑。

然后就这样一层层往下搜,直到 x mod n == 0

同余解决

虽然似乎数据很水,不用同余亦可

根据题目描述,n≤200,是一个大数,需要用高精度,然而网上提供了一个很好的数学方法,就是在每个解之后mod n。
这里有链接
同余是什么
(a×b) mod p = ((a%p)×(b%p)) mod p
这样就可以了

source;

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define rg register
#define inf 0x3f3f3f3f
using namespace std;
int f[524286],n;
int main(){
    while(1)
    {
        scanf("%d",&n);
        if(n==0) break;
        f[1]=1;
        int i;
        for(i=2;f[i-1]!=0;i++)
            f[i]=(f[i/2]*10+i%2)%n;

        i--;
        int p=0;
        while(i)
        {
            f[p++]=i%2;
            i/=2;
        }
        while(p)
            printf("%d",f[--p]);
        printf("\n");
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/jiangbojun2017/article/details/81043668