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;
}