题目描述
最近 koala 学习了数论,智商不高的他觉得数论十分复杂,但是他喜欢上了数字 77 ,因为 77 是个位数中最大的质数。
为了表达对 77 的赞美之情,他创造了一个长度是无限的数列,并取名为 "七大数列" ,记为 aa,数列上的每一个数字记为 aiai。这个数列完全由数字 77 构成,而且具有严格的单调性,富有美感,koala 对此十分满意。简单描述,"七大数列" 的第一个数字是77 ,第二个数字是7777 ,第三个数字是777777 ……,第100100个数字由100100个77组成 ,…… ,即
a1=7a1=7 , a2=77a2=77 , a3=777a3=777 , a4=7777a4=7777 , a5=77777a5=77777 .....
而 Cola 喜欢的数字是 nn ,不仅如此,nn 的倍数Cola也都喜欢 。身为好朋友,koala 想知道数列中第几个数字是Cola喜欢的,当然这样的数字可能有很多个,请告诉koala "七大数列" 中最小的Cola喜欢的数是第几个就可以啦。即:满足 λn=axλn=ax中xx的最小值(λ∈N∗λ∈N∗) 。但是毫无疑问 koala 解决不了如此复杂的数列问题,又不好意思问 Cola 同学,于是他找到了您。如果您能帮助他解决这个问题,就可以得到一堆皱皱巴巴的糖果。
现在,请您请编写一个程序求出 xx 的最小值,若 xx 不存在,则输出 −1−1。
输入格式
一个正整数nn , 表示 Cola 喜欢的数。
1≤n≤1061≤n≤106
输出格式
一个整数,表示数列中第几个数是Cola喜欢的。
样例输入
11
样例输出
2
提示
第2个数字是77
77/11=7
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
using namespace std;
typedef long long ll;
int w[300105];
int e[2102105];
const int maxx = 40010;
int n,m,r,k,t,num,now,p;
const double pi=acos(-1.0);
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n ;
int ans = 0;
while(1)
{
m = m * 10 + 7;//m代表各种 7大数列的内容,并且依次判断
m = m % n;//用n对当前的7大数列进行取余
if(e[m] == 1)//如果 经过循环后
{
ans = -1;
break;
}
ans ++;
if(m == 0)//如果能被除断 说明符合题意输出当前的ans值
{
break;
}
e[m] = 1;//将当前的值标记
//不符合题意的 情况将在7大数列大于n后进入循环越来越小直到 回到e[m] = 1 返回ans=-1
}
cout << ans ;
return 0;
}