c语言求质因子
❶ c语言求质因子(质数且是输入数的因子)最多的那个数
要找到满足题意的数,
就是小于等于n的最大的2的幂,
证明:
假设这个数m是2^k,并且2^k小于等于n。
那么它有k个质因子(都是2),
反证法:
假如某个数x有k+1个因子,
质数里面最小的是2,那么该数x一定满足:
m<2^(k+1)<=x<=n
因为m是小于等于n的最大的2的幂,因此x不存在。
所以m就是小于等于n的最大的2的幂。
(注意这里说的是最多有k个因子,最小的是2^k,k个因子还可能是2^(k-1)*3,也是有可能的,但是就是不可能有k+1个因子)
代码:
#include<stdio.h>
unsignedflp2(unsignedx)
{
x=x|(x>>1);
x=x|(x>>2);
x=x|(x>>4);
x=x|(x>>8);
x=x|(x>>16);
returnx-(x>>1);
}
intmain()
{
printf("%u",flp2(1000000000));
return0;
}
❷ c语言将一个正整数分解质因数,望高手帮我详细解释一下程序
1、首先打开vc6.0, 新建一个vc项目,添加头文件。
❸ C语言,求一个整数的所有质因子。。谢谢大神,我是C语言小白。。
测试结果:
请输入一个数N,N的所有质数因子:
520
2 5 13
源代码:
#include "stdio.h"
#include "conio.h"
int isShuShu(int n)
{
int i;
for(i=2;i<=n/2;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
main()
{
int i;
int n=0;
printf("请输入一个数N,N的所有质数因子:\n");
scanf("%d",&n);
for(i=2;i<=n/2;i++)
{
if(n%i==0&&isShuShu(i))
{
printf("%3d ",i);
}
}
getch();
}
思路:
一个函数isShuSHU()用来判断给定 的数是否是素数
从1到n的一般,一个一个排查,看那些数能整除N,且是素数。输出即可
❹ c语言编程:求一个数的质因子
#include<stdio.h>
intmain()
{
inti,j,a[999999],x,y;
scanf("%d",&x);//读取
y=x;
for(i=2,j=0;i<=x;i++)//遍历质因数
{
if(x%i==0)//如果读取的数能够被质因数整除
{
a[j]=i;//将符合条件的质因数存到数组中
j++;//数组下标递增
x/=i;//重新赋值
i=2;//重新遍历
}
}
printf("%d=%d",y,a[0]);//输出原数、等号、第一个质因数
for(i=1;i<j;i++)
printf("×%d",a[i]);//如果存在第二个质因数,则继续输出
return0;
}