c语言求一个数的约数
‘壹’ c语言 快速求一个自然数的约数的个数
对于这个问题我们只需要暴力从2到根号n这个闭区间的所有整数就行了,如果能整除计数就加2,不过如果这个整数的平方就是输入的n则计数只能加1。最后不要忘记1和其自身。如果根号n不是一个整数,那么我们可以向下取整。算法的整体复杂度是根号n,这个算法的时间消耗与根号n成正比,不过可以确定的是n在32位的整型(或者无符号的整型)数据范围内时间消耗还是比较乐观的。参考代码(C语言实现):
#include <stdio.h>
#include <math.h>
int main(void)
{
int i;
int n;
int m;
int num;
scanf("%d", &n);
num = 0;
m = sqrt(n);
for (i=2; i<=m; ++i)
{
if (n % i == 0)
{
num += 2;
if (i * i == n)
{
--num;
}
}
}
/*自然数1应该只有一个因子才对*/
if (n != 1)
{
num += 2;
}
else
{
++num;
}
printf("%d\n", num);
return 0;
}
‘贰’ 如何用C语言求一个整数的所有约数之和
#include <stdio.h>
int main(int argc, char *argv[])
{
int i,a,sum;
while(scanf("%d",&a)!=EOF)
{
printf("%d 的约数有:",a);
sum=0;
for(i=1;i<=a;i++)
if(a%i==0)
sum+=i,printf("%d ,",i);
printf(" 约数和为 %d\n",sum);
}
return 0;
}
‘叁’ c语言编程 怎么求一个数(除去本身)的最大约数 例如 2011515458525
#include<stdio.h>
voidmain()
{
longlongm,t,i;
intf=0;
//printf("输入要判断的数:");
//scanf("%lld",&m);
//可以在此处改为自己输入m的值
m=2011515458525;
for(i=2;i<=m/2;i++)
{
if(!(m%i))
{
t=m/i;
f=1;
break;
}
}
if(f==0)
printf("%lld是质数!",m);
else
{
printf("%lld的最大约数是%lld ",m,t);
printf("且%lld=%lld*%lld ",m,t,i);
}
}
‘肆’ C语言有么高效求一个数的所有约数哦
比较好的办法是先高效地求出质因子分解,再由这个分解来生成所有的约数。
至于怎么高效地进行质因子分解,这个比较复杂,如果仅限于32位整数范围并且要求不高的话可以考虑下面两种方案
1.事先生成65536内的质数表,然后就很容易了。
2.比较偷懒的办法,先把因子2过滤掉,然后遍历奇数。
一楼写的程序显然属于还没入门,算法笨不说,还有语法错。
‘伍’ C语言求最大约数
程序:
#include<stdio.h>
int main()
{
int n,t;
scanf("%d",&n);
for(t=n-1;t>99;t--)
{
if(n%t==0)
{
printf("%d\n",t);
break;
}
}
if(t==99)
printf("No found!\n");
return 0;
}
解释:
你的程序可以运行,没啥语法问题。如果求一个大于等于100的数的约数中的最大三位数,那不就是它本身嘛。比如133&133=0,最大约数就是自己,而且也是三位数。你的意思是不是说求这个数的除了它本身之外的约数中的最大三位数?我发的程序就是这样写的。可能找不到这样的数。
‘陆’ C语言求公约数
1、新建一个C语言源程序,这里使用Visual C++6.0的软件:
‘柒’ 用c语言求2个数的公约数。
#include<stdio.h>
#include<stdlib.h>
int gcd(int m,int n)
{
int i,j,r;
i=m;
j=n;
r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
return n;
}
int main()
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d",gcd(x,y));
system("pause");
return 0;
}
‘捌’ c语言高效求一个数的约数和
//#include"stdafx.h"//vc++6.0加上这一行.
#include"stdio.h"
intmain(void){
inta,b,i,x,y,f,n;
printf("Entera&b(int)... ");
scanf("%d%d",&a,&b);
for(n=a;n<=b;n++){
for(x=1,n&1?(i=3,f=2):(i=2,f=1);(a=i*i)<=n;i+=f)
if(!(n%i))
(x+=i)+=a!=n?n/i:0;
for(y=1,x&1?(i=3,f=2):(i=2,f=1);(a=i*i)<=x;i+=f)
if(!(x%i))
(y+=i)+=a!=x?x/i:0;
if(y==n&&y!=x)
printf("%d %d ",n,x);
}
return0;
}
‘玖’ C语言编程: 输入一个正整数求它的全部约数,并输出。运行结果停留在屏幕上。
代码: #include <stdio.h>
void main ()
{
int x,i;
printf("请输入一个正整数:\n");
scanf("%d",&x);
printf("它的全部约数是:\n");
for(i=1;i<=x;i++)
{
if(x%i==0)
printf("%d\n",i);
}
} 图: