how many ones?
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
Given any integer 0 <= n <= 10000 not divisible by 2 or 5, some multiple of n is a number which in decimal notation is a sequence of 1's. How many digits are in the smallest such a multiple of n?
-
输入
- Each line contains a number n. 输出
- Output the number of digits. 样例输入
-
3 7 9901
样例输出
-
3 6 12
了解了同余定理之后还需要将这个题与同余定理联系起来。
一个数论知识:如果两个数同余,那么对这两个数作任何相同运算,结果还是同余。
拿n=3来举例
我们要找到3的倍数m,也就是说m mod 3 == 0;也就是说不一定要求出m只要找到mod与m同余的数即可。
从 1开始 1 mod 3 == 1
要把1变成11就要把1乘以10加1 11 mod 3 == 1*10+1 mod 3 == 2
考虑111的情况 111 mod 3 == 2*10+1 mod 3 == 0
代码来自解题报告:
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
int sum=0;
int cnt=0;
while(true)
{
++cnt;
sum=(sum*10+1)%n;
if(sum==0)
break;
}
printf("%d\n",cnt);
}
}