UVA-10710 Skyscraper Floors (找规律+幂取模)
2024-10-19 01:22:04
题目大意:题目中给了一种数的定义,根据定义,让判断一个给定的数是不是这种数。题中叫这种数为吉米数,定义如下:对序列1,2,3,,,,n,做n-1次SF变换(对该变换的解释在下文),如果能得到原序列,则n为吉米数。
SF变换:若n为偶数,以n=10为例,一次SF变换是这样的
1,2,3,4,5,6,7,8,9,10—>1,2,3,4,5 6,7,8,9,10—>6,1,7,2,8,3,9,4,10,5 此为偶数的一次SF变换,第二次变换是基于新序列的,以此类推。
若n为奇数,以n=9为例,一次SF变换是这样的
1,2,3,4,5,6,7,8,9—>1,2,3,4 5,6,7,8,9—>5,1,6,2,7,3,8,4,9 此为奇数的一次SF变换,第二次变换也是基于新序列的,以此类推。
题目分析:根据题中的提示,偶数不是吉米数。如果是吉米数,则相应的序列中的任一元素的位置周期都是一样的,所以只需考虑1。最终找到1的位置有如下规律:pos=(2^t)%n,其中t为变换的次数。所以只需判断(2^(n-1))%n=1是否成立即可。
实际上还是幂取模!!!
代码如下:
# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;
# define ll long long
ll mypow(ll a,ll b,ll m)
{
if(b==)
return ;
if(b==)
return a%m;
ll u=mypow(a,b/,m);
u*=u;
u%=m;
if(b&)
u*=a;
return u%m;
}
bool is(ll x)
{
ll pos=mypow(,x-,x);
return pos==;
}
int main()
{
ll n;
while(scanf("%lld",&n)&&n!=-){
if(is(n))
printf("%lld is a Jimmy-number\n",n);
else
printf("%lld is not a Jimmy-number\n",n);
}
return ;
}
最新文章
- 软件开发常用快捷键 &; 命令总结
- css整理-02 颜色和字体
- Exif的Orientation信息说明
- POJ3320 Jessica&#39;s Reading Problem(尺取+map+set)
- Processing_百度百科
- 设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明
- 如果不能显示真正的考验个别车型toast问题解决
- java实现截屏
- [mysql]ERROR 1364 (HY000): Field &#39;ssl_cipher&#39; doesn&#39;t have a default value 解决方法
- WmS详解(二)之如何理解Window和窗口的关系?基于Android7.0源码
- js常会问的问题:找出字符串中出现次数最多的字符。
- Redis数据结构之sds基本操作函数
- VUE 图片验证码
- java Illegal unquoted character ((CTRL-CHAR, code X)): has to be escaped using backslash to be included in string value
- Oracle同义词(synonym)
- Android privilege escalation to mediaserver from zero permissions (CVE-2014-7920 + CVE-2014-7921)
- [No0000159]C# 7 中的模范和实践
- 13: vue项目结构搭建与开发
- Java依赖注入方式
- ABAP-1-会计凭证批量数据导入本地ACCESS
热门文章
- HttpClient配置SSL绕过https证书
- hibernate的实现原理以及延迟加载
- Python3 打开 https 链接,异常:“SSL: CERTIFICATE_VERIFY_FAILED”
- xargs 原理&;使用
- 微信小程序开发环境
- kafka调试遇到的问题
- ";1130-host ... is not allowed to connect to this MySql server";登录失败
- P3939 数颜色
- hdu4719 Oh My Holy FFF 线段树优化dp
- Java初始化块的作用