如果n不大的话,
用构造+余数进行判重的话,还是会比较快的,
1->10->11->100->101->110............................
汗,都懒得写代码了.......... cheat了一个威望,哈.....
那好吧.
/*任意给定一个自然数N,寻找一个M,要求M是N的倍数,并且它的所有各位数字是由
0或1组成,并要求M尽可能小*/
#include<stdio.h>
long D_B_D(int n)
{
int i=0,a[8];
long sum=0;
while(n)
{
a[i]=n%2;
n=n/2;
i++;
}
i--;
while(i>=0)
{
sum+=a[i];
if(i>0)
{
sum*=10;
}
i--;
}
return(sum);
}
int main()
{
int i,n;
long sum;
scanf("%d",&n);
for(i=1;i<=1023;i++) //最多能处理到long的范围。共10位。
{
sum=D_B_D(i);
//printf("sum=%ld\n",sum);
if(sum%n==0)
{
printf("%ld\n",sum);
break;
}
}
return(0);
}
1.
#include<stdio.h>
void function(int);
void main()
{
int m;
scanf(\"%d\",&m);
while(m!=0&&m>=2&&m<=1000)
{
printf(\"%d=1\",m);
function(m);
putchar('\n');
scanf(\"%d\",&m);
}
}void function(int m)
{
while(m!=1)
{
for(int n=2;n<=m;n++)
if(m%n==0)
{
m/=n;
printf(\"*%d\",n);
break;
}
}
}
输入一个数,求它的质因子分解!
#include<stdio.h>
#include<math.h>
int prime[10000];
int mersenne()
{
int p=0;
int i,j,flag;
for(i=2;i<=10000;i++)
{
flag=0;
for(j=2;j<=sqrt(i);j++)
if(i % j==0)
{
flag=1;
break;
}
if(flag==0)
{
prime[p]=i;
p+=1;
}
}
} /*从int mersenne()到这里是求从2到32767之间的素数*/
void main()
{
int analyse(int);
int in;
mersenne();
scanf("%d",&in);
while(in!=0)
{
if(in>=2)
analyse(in);
else
printf("Error!!!");
scanf("\n%d",&in);
}
}
int analyse(int ana) /*以下程序段是求质因子分解*/
{
int result[20],i;
int temp,p=0,q=0;
temp=ana;
while(ana!=1 && ana!=0)
{
if((ana %prime[p])==0)
{
ana=ana/prime[p];
result[q]=prime[p];
++q;
}
else
{
++p;
}
}
printf("%d=%d",temp,result[0]);
for(i=1;i<q;i++) printf("*%d",result[i]);
printf("\n");
return 0;
}
各位看看算法有什么地方可以改进的。。。怎么样做效率会更高!!!
自己也瞎写了一个,
#include<stdio.h>
main()
{
int i=2,flag=1;long m;
printf("input the number:");
while(m)
{
scanf("%ld",&m);
if(m)
printf("%ld=",m);
while(m!=1)
{
flag=1;
for(i=2;i<=m&&flag==1;i++)
if(m%i==0)
{
m=m/i;
printf("%d*",i);
flag=0;
}
}
printf("\b \n");
}
getch();
return 0;
}