51Nod 1116 K进制下的大数【数学】
来源:互联网 发布:wps文字软件下载 编辑:程序博客网 时间:2024/06/06 02:30
- 题目大意
- 思路
- 代码
- Hit
题目大意
传送门
有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数在K进制下是K - 1的倍数。现在由你来求出这个最小的进制K。
例如:给出的数是A1A,有A则最少也是11进制,然后发现A1A在22进制下等于4872,4872 mod 21 = 0,并且22是最小的,因此输出k = 22(大数的表示中A对应10,Z对应35)。
Input
输入大数对应的字符串S。S的长度小于10^5。
Output
输出对应的进制K,如果在2 - 36范围内没有找到对应的解,则输出No Solution。
Input示例
A1A
Output示例
22
思路
本文是看教程:O(n)可以解决的2道题
习题的第一题,是比较好的思路。
遇到数相关的题目,凡是提到了
欧拉函数ph(n): 所有小于n且与n互质的数的个数
比如说ph(12)=4,[1,5,7,11与12互质]欧拉定理:
aph(n)=1(modn)
n和a是正整数并且互质的时候,欧拉定理成立。
当欧拉公式中的n为质数的时候,显然ph(p)=p−1 ,则可得:费马小定理:
a(p−1)=1(modp)
这题目中
所以判断各个位数上加起来能否被p-1整除就好了,若能整除答案就是p。
代码
#include<stdio.h>#include<string>#include<iostream>#include<cstring>using namespace std;#define max_int(a,b) (a>b)? a:bchar S[100005];int char2int(char a){ if('A'<=a && a<='Z') return a-'A'+10; else return a-'0';}int main (){ scanf("%s",S); int len = strlen(S); int ans = 0; int max_b = 0; for(int i=0;i<len;i++){ ans += char2int(S[i]); max_b = max_int(max_b,char2int(S[i])); } int flag = 0; for(int i=max_b+1;i<=36;i++) { if(ans%(i-1)==0) {printf("%d\n",i);flag =1; break;} } if(flag == 0) printf("No Solution\n");}
Hit
费马小定理!
阅读全文
0 0
- 51Nod 1116 K进制下的大数【数学】
- 51NOD 1116 K进制下的大数
- 51nod 1116 K进制下的大数
- 51Nod 1116 K进制下的大数
- 51nod 1116 K进制下的大数
- 51nod 1116 K进制下的大数
- 51nod 1116 K进制下的大数
- 51Nod 1116 K进制下的大数
- 51nod 1116 K进制下的大数
- 51nod 1116 K进制下的大数
- 51nod 1116 K进制下的大数
- 51nod 1116 K进制下的大数
- 51Nod 1116 K进制下的大数
- K进制下的大数 51Nod
- 51nod 1116 K进制下的大数 (暴力枚举)
- 51Nod-1116-K进制下的大数
- 51nod 1116 K进制下的大数 暴力/数论
- 51nod 1116 K进制下的大数 利用同余式的乘法传递性质
- 51nod1287 加农炮(线段树)
- HDU 1576 A/B 扩展欧几里得
- mysql5.6.30安装部署(mysql+keeplived)
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- oracle事务处理详解
- 51Nod 1116 K进制下的大数【数学】
- Java 方法
- Dijkstra算法,求最短路(dp 动态规划)
- Qt5开发学习之图形视图框架(九)
- 字符串翻转的两种方法
- STM32CubeMX的SDIO模式下对SD卡读写测试(附源码)
- ubuntu上解决访问github慢的方法
- Selenium2+Python2.0自动化测试【12】 多表单切换
- 自定义控件:带有清除功能的 ClearEditText