寻找符合条件的整数
2013-09-03 19:11
253 查看
1. 寻找符合条件的整数
任意给定一个正整数N,求一个最小的正整数M,是的N*M十进制中仅仅包含了1和0。
/若N=6.若N*M=K则有
1. 搜索K的最高位,最高位必须是1,此时k=1,k%N=1
2. 搜索下一位,下一位可以是0也可是1,则有(k*10+0)%N=10%6=4,(k*10+1)%N=5
3. 在搜索下一位:下一位可以是0也可是1,有
(10*0+0)%N=100%N 101%N 110%6 111%6
4 在搜索下一位
1000%6!=0
1001%6!=0
1010%6!=0
1011%6!=0
1100%6!=0
1101%6!=0
1110%6==0 所以1110就是所求的N*M
总结方法:
将余数逐层存储:
Mod[1...C]={1,4,5,4,5,2,3,4,5,2,3,2,3,0}
上述余数表明在得到余数0时候,进行了14次的乘以10的操作,故n很大的时候,容易溢出。
同余模定理如下
(a*b)%n=(a%n*b%n)%n
(a+b)%n=(a%n+b%n)%n
则可以有mod[i]=(mod[i-1]*10+i%2)%N
代码清单
任意给定一个正整数N,求一个最小的正整数M,是的N*M十进制中仅仅包含了1和0。
/若N=6.若N*M=K则有
1. 搜索K的最高位,最高位必须是1,此时k=1,k%N=1
2. 搜索下一位,下一位可以是0也可是1,则有(k*10+0)%N=10%6=4,(k*10+1)%N=5
3. 在搜索下一位:下一位可以是0也可是1,有
(10*0+0)%N=100%N 101%N 110%6 111%6
4 在搜索下一位
1000%6!=0
1001%6!=0
1010%6!=0
1011%6!=0
1100%6!=0
1101%6!=0
1110%6==0 所以1110就是所求的N*M
总结方法:
将余数逐层存储:
Mod[1...C]={1,4,5,4,5,2,3,4,5,2,3,2,3,0}
上述余数表明在得到余数0时候,进行了14次的乘以10的操作,故n很大的时候,容易溢出。
同余模定理如下
(a*b)%n=(a%n*b%n)%n
(a+b)%n=(a%n+b%n)%n
则可以有mod[i]=(mod[i-1]*10+i%2)%N
代码清单
#define N 1000 int mod ; int _tmain(int argc, _TCHAR* argv[]) { int n; cin>>n; mod[1]=1; int i; for(i=2;mod[i-1]!=0;i++) mod[i]=(mod[i/2]*10+i%2)%n; i--; int pm=0; while(i) { mod[pm++]=i%2; i=i/2; } while(pm) { cout<<mod[--pm]; } cout<<endl; return 0; }
相关文章推荐
- 连载5:寻找符合条件的整数(《编程之美》第2.8节)
- 在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;他既是完全平方数,又是两位数字相同,例如144,676等
- 给出一个整数,寻找符合条件的幸运数的个数
- 寻找符合条件的整数
- 编程之美——找符合条件的整数
- 编程之美-找到符合条件的整数
- 编程之美2.8 找符合条件的整数
- 编程之美——寻找满足条件的整数
- python -- 寻找最小正整数N,满足某个条件
- 找符合条件的整数
- 在一个整数数组中寻找符合A+B=C的组合,使C为最大
- 编程之美2.8 找符合条件的整数
- 用c++编写程序。在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同。
- 编程之美——2.8 找符合条件的整数
- 编程之美2.8找符合条件的整数
- 找符合条件的整数
- 找到符合条件的整数
- 输入一个整数,如果该整数x符合条件:-1<x<10,则输出“ok”,否则输出“not ok”
- 编程之美 找出符合条件的整数
- 编程之美:找符合条件的整数