|
楼主 |
发表于 2006-6-12 22:37
|
显示全部楼层
楼上的可以写下整个程序吗?
有点看不明白……
我那个是2^99再优化也是2^45都是太大了。。。
这道题在北大的ACM ONLINE JUDGE 上有 题号是 1745
另一个算法:
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <stdlib.h>
- int fun(int a,int k)/* 转换为在K的一半以内的数 */
- {
- int i;
- i=abs(a%k);
- i=i>(k/2)?(k-i):i;
- return i;
- }
- int *nu(int *a,int b,int k)/* 实现加减 */
- {
- int *c,i,j;
- j=k/2+1;
- c=(int *)malloc(j*sizeof(int));
- memset(c,0,j*sizeof(int));
- for(i=0;i<j;i++)
- {
- if(!a[i])continue;
- else {c[fun((i+b),k)]=1;c[fun((i-b),k)]=1;}
- }
- return c;
- }
- int main()
- {
- int *a,n,k,i,b;
- /*scanf("%d%d",&n,&k);*/
- randomize();
- n=100;k=rand()%100;
- i=k/2+1;
- a=(int *)malloc(i*sizeof(int));
- memset(a,0,i*sizeof(int));
- a[0]=1;
- for(i=0;i<n;i++)
- {
- /*scanf("%d",&b);*/
- b=rand()%10000;
- if(b%k==0)continue;
- else a=nu(a,b,k);
- }
- if(a[0]==1)printf("Divisible");
- else printf("Not divisible");
- getch();
- return 0;
- }
复制代码 |
|