POJ 1426 Find The Multiple


1426

”但是由于数据等其他方面的原因,导致某些题目可以暴力的通过,所以,建议大家在比赛时也要勇于尝试,说不定就能过。“

本题数据给的都是可直接用long long求解的。下面给出不钻空子的算法:

#include"stdio.h"
#include"limits.h"
int mod_b[1000000];
int main(){
    while(1){
        int x;
        scanf("%d",&x);
        if(x==0) break;
        mod_b[1]=1;
        int i;
        //      b = (b/10)* 10   + b%10
        // 被除数 = 商    * 除数 + 余数

        // 同余模定理
        // b % x =  ((b/10)   * 10      + b%10)%x
        //       = (((b/10)   * 10)%x   + b%10)%x
        //       =((((b/10)%x)* 10) + b%10)%x
        for(i=2;mod_b[i-1]!=0;i++){
            mod_b[i]=(mod_b[i/2]*10+i%2)%x;
        }
        int a=  i-1;
        int ans[205];
        int cnt=0;
        while(a){
            ans[cnt++]=a%2;
            a /= 2;
        }
        for(int j=cnt-1;j>=0;j--){
            printf("%d",ans[j]);
        }
        printf("\n");
    }
}
oj