博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sicily 1231 The Embarrassed Cryptography
阅读量:5940 次
发布时间:2019-06-19

本文共 1517 字,大约阅读时间需要 5 分钟。

其实就是给出一个数k,和一个上界L,找到小于这个上界L的最小的可以被k整除的数!

问题在于大数k,同样只能用高精度来解决了,取模的时候从最高为开始模,然后把余数给下一位加上,再取模!

而这里还用到了压缩的方法,每三个数字作为一个数储存,然后取模的时候也是一样,加余数的时候乘个1000就行了!

1 //sicily 1231 The Embarrassed Cryptography 2 #include 
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 const int N = 1000000;10 bool a[N+1];11 char k[105];12 int hp[40];13 int thousand[]={
1,10,100,1000};14 int len;15 16 //求素数(筛选法) 17 void get_prime()18 {19 memset(a,1,sizeof(a));20 for(int i=2; i<=N; i++)21 {22 if(a[i])23 {24 for(int j=2; j*i<=N; j++)25 a[i*j]=0;26 }27 }28 } 29 //高精度,三位三位的分 30 void high_precision() 31 { 32 memset(hp, 0, sizeof(hp)); 33 len=(strlen(k)-1)/3; //注意偶数的时候 34 int klen=strlen(k); 35 for (int i=0; i<=len; i++) 36 { 37 for (int j=1; j<=3 && klen-i*3-j>=0; j++) 38 hp[i]+=thousand[j-1]*(k[klen-i*3-j]-'0'); 39 }40 //for(int i=0; i<=len; i++)41 // cout << hp[i] << " ";42 //cout << endl;43 } 44 //高精度取模 45 int is_mod(int x)46 {47 int c=0;48 for(int i=len; i>=0; i--)49 c=(hp[i]+c*1000)%x;50 return c;51 }52 53 54 int main()55 {56 int l;57 get_prime();58 while(scanf("%s%d", k, &l) && strcmp(k,"0") && l)59 {60 high_precision();61 int ans=0, flag=1; 62 63 for(int i=2; i

 

转载于:https://www.cnblogs.com/dominjune/p/4548149.html

你可能感兴趣的文章
11.03T1 DP
查看>>
P2924 [USACO08DEC]大栅栏Largest Fence
查看>>
jQuery操作table tr td
查看>>
工作总结:MFC自写排序算法(升序)
查看>>
螺旋队列问题之二
查看>>
扩展运算符和解构赋值的理解
查看>>
手机H5显示一像素的细线
查看>>
Menu 菜单栏
查看>>
Integer跟int的区别(备份回忆)
查看>>
集合解析
查看>>
详解分布式应用程序协调服务Zookeeper
查看>>
软件工程之构建之法
查看>>
UVa 10902
查看>>
Mathf.Sin正弦
查看>>
禁止浏览器缓存js
查看>>
【Redis】安装PHP的redis驱动(二)
查看>>
java中string和int互相转化
查看>>
什么是序列化,为什么要序列化
查看>>
Java保留小数点后有效数字
查看>>
新学期的合作
查看>>