POJ 1426 Find The Multiple(数论——中国同余定理)

时间:2022-02-28 19:22:10

题目链接:

http://poj.org/problem?id=1426

Description

Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.

Input

The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input.

Output

For each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.

Sample Input

2
6
19
0

Sample Output

10
100100100100100100
111111111111111111
题意描述:
输入n (1 <= n <= 200)
输出一个由0和1组成的数并且能够被n整除
解题思路:
看了题解有了一些思路,用mod[i]=mod[i/2]*10+i%2;这个式子计算二进制i在十进制的形式并存进mod[i]数组,所以使用long long 定义mod数组,很容易理解
 #include<stdio.h>
long long mod[];
int main()
{
int n;
while(scanf("%d",&n),n)
{
int i;
for(i=; mod[i-]%n != ;i++)
mod[i]=mod[i/]*+i%;// mod[i]表示十进制形式的二进制i
printf("%I64d\n",mod[i]);
}
return ;
}

但是延伸一下,如果超过200或者更大呢,请参考

#include<stdio.h>
#define N 600000
int mod[N];
int ans[];//根据情况增大数组
int main()
{
int i,k,n,j;
while(scanf("%d",&n),n)
{
mod[]=%n;
for(i=;mod[i-]!=;i++)
mod[i]=(mod[i/]*+i%) %n;
//printf("i-1=%d\n",i-1);
i--;
k=;
while(i)
{
ans[k++]=i%;
i/=;
}
for(i=k-;i>=;i--)
printf("%d",ans[i]);
puts("\n");
}
return ;
}