c语言求一个数的因子

2024年12月04日 15:32
有5个网友回答
网友(1):

#include

# include

#define N 100

long factor(int m,int fac[],int *cp){

int c1,c2,i,k;

long s;

fac[0]=1;

for(c1=s=1,c2=N-1,i=2;;){

k=m/i;

if(m%i==0){

if(i!=k){

fac[c1++]=i;

fac[c2--]=k;

s+=i+k;

printf("i=%d k=%d\n",i,k);

}else{

fac[c1++]=i;

s+=i;

}

}

i++;

if(i>=k) break;//这个时候k已经开始等于自身的根号,或者将要出现和之前k对称的i,引起自身重复故退出

for(c2++;c2<=N-1;c2++){

fac[c1++]=fac[c2];

printf("%s %d\n","**",fac[c2]);

}

*cp=c1;

return s;

int main(int argc, char const *argv[])

{

/* code */ 

int factors[N],i,count;

long sum;

sum = factor(atoi(argv[1]),factors,&count);

for(i=0;i

printf("%5d",factors[i]);

}

printf("\n\n");

printf("sum=%5ld  count=%5d\n",sum,count);   

return 0;

}

扩展资料:

有一种说法是“因子不限正负”,不过通常情况下只取正因子。

1, -1, n 和 -n 这些数叫做 n 的明显因子

表示方法:可以用因子|倍数或倍数≡0 (mod 因子) 来表达(参见同余),但用后者时因子一定要是正因子。因子∣倍数 式中的垂直线是整除符号。它的统一码值是 U+2223。

例如 42=6x7,因此 7 是 42 的因子,写作 7∣42,亦是42≡0(mod 7)。



网友(2):

#include
int m;
void num(int n,int b[])
{
    int i,j,a[100];
    j = 0;
    for(i=1;i<=n/2;++i)
    {
        if(n%i==0)
            a[j++] = i;
    }
    for(i=0;i        b[i] = a[i];
    m = j;
    return;
}
int main()
{
    int i,n,b[100];
    scanf("%d",&n);
    num(n,b);
    for(i=0;i        printf("%d  ",b[i]);
    return 0;
}

要写成动态的可以这样:

#include
int m;
void num(int n,int *&b)
{
    int i,j,a[100];
    j = 0;
    for(i=1;i<=n/2;++i)
    {
        if(n%i==0)
            a[j++] = i;
    }
    b = new int[j];
    for(i=0;i        b[i] = a[i];
    m = j;
    return;
}
int main()
{
    int i,n,*b,*p;
    scanf("%d",&n);
    num(n,b);
    for(i=0;i        printf("%d  ",b[i]);
    return 0;
}

将a数组作为形式参数,把a中的数据传递给主调函数中的实参数组b。实参数组b的大小要保证能够存放整数m的因子

这句话好神奇……

这句话似乎想要这样:

#include
int m;
void nstrcpy(int a[],int b[])
{
    int i;
                   
    for(i=0;i        b[i] = a[i];
}
void num(int n,int b[])
{
    int i,j,a[100];
    j = 0;
    for(i=1;i<=n/2;++i)
    {
        if(n%i==0)
            a[j++] = i;
    }
    m = j;
    nstrcpy(a,b);
    return;
}
int main()
{
    int i,n,b[100];
    scanf("%d",&n);
    num(n,b);
    for(i=0;i        printf("%d  ",b[i]);
    return 0;
}


网友(3):

struct factorsTable
{
int* factorStart;
int count;
}

factorsTable* getFactors(int num)
{
if (num < 0) {
return NULL;
}
....
}

建议这么写,这样就可以解决数组返回指针头,不能返回数组长度问题。

网友(4):

#include 
#include
#include
#include
using namespace std;
int yinzi(int m,int *a)
{
    int max=sqrt(m);
    int j=0;
    for(int i=1;i<=max;i++)
    {
        if((m%i)==0)
        {
            a[j]=i;
            j++;
            a[j]=m/i;
            j++;
        }
    }
    return j;
}
int main(int argc, char *argv[])
{
    int m;
    int *b=new int[m];
    cin>>m;
    int len=yinzi(m,b);
    for(int i=0;i        cout<    cout<    return 0;
}

网友(5):

#include 
int Find_Divisor(int *a, int m);
int main()
{
int nTemp;
printf("Enter an integer:");
scanf("%d", nTemp);
int *b = (int *)malloc(sizeof(int) * nTemp);
int num = Find_Divisor(b, nTemp);
for (int i = 0; i < num; i++)
printf("%d ", b[i]);
return 0;
}
int Find_Divisor(int *a, int m)
{
int j = 0;
for (int i = 1; i <= m; i++)
{
if (m % i == 0)
{
a[j] = i;
j++;
}
}
return j;
}