复杂的数列(模拟)

题目描述

最近 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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tang_7777777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值