复杂的数列(齐大第十一届校赛)

齐大第十一届校赛第二题

时间限制:1000ms     内存限制:65535KB

题目描述:

最近 koala 学习了数论,智商不高的他觉得数论十分复杂,但是他喜欢上了数字 7 ,因为 7 是个位数中最大的质数。
为了表达对 7 的赞美之情,他创造了一个长度是无限的数列,并取名为 "七大数列" ,记为 a,数列上的每一个数字记为 ai。这个数列完全由数字 7 构成,而且具有严格的单调性,富有美感,koala 对此十分满意。简单描述,"七大数列" 的第一个数字是7 ,第二个数字是77 ,第三个数字是777 ……,第100个数字由100个7组成 ,…… ,即

a1=7 , a2=77 , a3=777 , a4=7777 , a5=77777 .....

而 Cola 喜欢的数字是 n ,不仅如此,n 的倍数Cola也都喜欢 。身为好朋友,koala 想知道数列中第几个数字是Cola喜欢的,当然这样的数字可能有很多个,请告诉koala "七大数列" 中最小的Cola喜欢的数是第几个就可以啦。即:满足 λn=ax中x的最小值(λ∈N∗)  。但是毫无疑问 koala 解决不了如此复杂的数列问题,又不好意思问 Cola 同学,于是他找到了您。如果您能帮助他解决这个问题,就可以得到一堆皱皱巴巴的糖果。
现在,请您请编写一个程序求出 x 的最小值,若 x 不存在,则输出 −1。

输入格式:

    一个正整数n , 表示 Cola 喜欢的数。(1≤n≤106)

输出格式:

    一个整数,表示数列中第几个数是Cola喜欢的。

代码实现:

#include <iostream>
using namespace std;
const int MAX=1000000;
bool a[MAX];
int main()
{
	int k,t=0,ans=0;
	cin>>k;
	while(true)
	{
		t=t*10+7;
		t%=k;
		ans++;
		if(t==0)
			break;
		if(a[t])
		{
			ans=-1;
			break;
		}
		a[t]=true;
	}
	cout<<ans<<endl;
	return 0;
}

本题并不难,但容易被样例带偏思路,要想到例如777能被3整除,本题就变得容易起来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值