跳至正文

factor int,factor into

C语言程序调试时显示无法written

C语言程序调试时显示无法written

#include

int factor(int);

main()

{

int x,i;

for(i=1;i<=1000;i++)

{x=factor(i);

if(x==1)

printf(“%d\t”,i);

}

}

int factor(int m)

{

int sum=0,a[100],i,j=0;//你的数组定义小了

for(i=1;i

if(m%i==0)

{

a[j]=i;

j++;

}

for(i=0;i

sum+=a[i];

if(sum==m)

return 1;

else

return 0;

}

再给你个C++的参考下

#include “iostream”

using namespace std;

void main()

{

int i,j,k,t;

int x[100];

for(i=2;i<=1000;i++)

{

for(t=0,k=0,j=1;j

if(i%j==0)x[k++]=j,t+=j;

if(t==i)

{

cout<

for(j=0;j

cout<

cout<

}

}

}

先产生10个100以内的随机整数,然后利用子过程Factor对所产生的随机数分解质因子 VB编程

先产生10个100以内的随机整数,然后利用子过程Factor对所产生的随机数分解质因子 VB编程

生成随机数的就不写了,网上一搜一堆

这里我用C#(VB不熟)写了分解的逻辑,返回的数组就是分解出来的因子

static int[] factor(int value)

{

//由于负数的跟正数一致,这里直接取绝对值,如果需要处理负数就删掉这行并改下后面的循环,怎么改自己琢磨

value = Math.Abs(value);

//3以内的不考虑

if (value<=3)

{

return new int[] { value };

}

//计算

for (int i = 2; i < value; i++)

{

//确定能除的最小数

if (value % i == 0)

{

//计算并合并数组

int[] array1 = new int[] { i },

array2 = factor(value / i),

array = new int[array1.Length + array2.Length];

array1.CopyTo(array, 0);

array2.CopyTo(array, 1);

return array;

}

}

return new int[] { value };

}

用C语言怎样做出分解质因数啊,请高手们帮个忙吧。

用C语言怎样做出分解质因数啊,请高手们帮个忙吧。

# include “stdio.h”

int isPrime(int a)

{ /*判断a是否是质数,是质数返回1,不是质数返回0*/

int i;

for(i=2;i<=a-1;i++)

if(a % i == 0)

return 0; /*不是质数*/

return 1; /*是质数*/

}

void PrimeFactor(int n)

{ /*对参数n分解质因数*/

int i;

if(isPrime(n)) printf(“%d “,n);

else

{

for(i=2;i<=n-1;i++)

if(n % i == 0)

{

printf(“%d “,i); /*第一个因数一定是质因数*/

if(isPrime(n/i)) { /*判断第二个因数是否是质数*/

printf(“%d “,n/i);

break; /*找到全部质因子*/

}

else

PrimeFactor(n/i); /*递归地调用PrimeFactor 分解n/i */

break;

}

}

}

main()

{

int n;

printf(“Please input a integer for getting Prime factor\n”) ;

scanf(“%d”,&n);

PrimeFactor(n); /*对n分解质因数*/

getche();

}

哪位大神能看出我的错误

修改后源程序如下:

#include

/*判断素数*/

int IsPrime (int m)

{

int i;

if (m == 2) return 1;

if (m == 1 || m % 2 == 0) return 0;

for (i = 3; i * i <= m;)

{

if (m % i == 0) return 0;

i += 2;

}

return 1;

}

int main()

{

int i,j,n,c=0;

for(n=10001;n<20000;n++)

{

for(i=2;i*i

{

if(n%i==0 && IsPrime(i) && IsPrime(n/i))

{ printf(“%6d”,n); if (++c%8==0) printf(“\n”); break;

}

}

}

printf(“\n”);

return 0;

}

java循环语句问题

1) int[] array=new int[1000]; for(int i=0;i<1000;i++){ array[i]=i; } 2) while(判断条件){ ... } 3) do { ... }while(判断条件);

C++ 编程

用递归. 1!=1 2!=1!*2 3!=2!*3 4!=3!*4 以此类推

C语言 整除

void main() { int min,max,factor; scanf("%d %d %d",&min,&max,&factor); for(int i=min;i!=max;i++) { if(i%factor==0) { printf("%d ",i); } } } 忘采纳 有问题 请追问

c++/c语言因式分解

这个问题真要做的话是很难的。

下面是一个比较简单的算法,基本思想是先求素数表,再求质因子分解,最后求组合。

// pku 3421 给一个整数X,求X的分解。1=X0,X1,X2,…,Xm=X,其中Xi整除X(i+1)且Xi

// 算法:因为m要最大,所以每次Xi只能乘以一个质因子。若不然可以得到一个更短的链。

// 先求出所有的质因子,所有质因子的排列除以重复的次数就是这种链的个数.

#include

#include

using namespace std;

__int64 p[172];

// 因子数目最多是20个

int e[21];

int cnt;

__int64 factor[21];

void prime()

{

int i,j,flag;

p[0]=2;

p[1]=3;

cnt=2;

for(i=5;i<=1024;i+=2){

flag=0;

for(j=1;p[j]*p[j]<=i;j++){

if(i%p[j]==0) {flag=1;break;}

}

if(!flag) p[cnt++]=i;

}

}

// 先质因子分解,再求组合的个数

void solve(__int64 a)

{

// j统计所有质因子的个数,k统计不同质因子个数

int i,j=0,flag,l=0;

memset(e,0,sizeof(e));

// 用1024以内的素数分解a,注意到a<=2^20,a最多含有一个超过1024的质因子

// a=p1^e1*p2^e2**pk^ek*ps^es,其中只有ps是大于1024的素数,且es只能为0或1

for(i=0;i1;i++){

flag=0;

while(a%p[i]==0){

flag=1;

e[l]++;

a/=p[i];

j++;

}

if(flag==1) l++;

}

// 若此时a!=1则a一定是素数

if(a!=1) {j++;e[l++]=1;}

__int64 res = factor[j];

for(i=0;i

if(e[i]!=0) res/=factor[e[i]];

}

printf(“%d %I64d\n”,j,res);

}

int main()

{

prime1();

//cnt=172;

// 阶乘

factor[0]=1;

for(__int64 i=1;i<21;i++) factor[i]=factor[i-1]*i;

__int64 a;

while(scanf(“%I64d”,&a)!=EOF){

solve(a);

}

return 1;

}