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< } } } 生成随机数的就不写了,网上一搜一堆 这里我用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 }; } # 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; } 1) int[] array=new int[1000]; for(int i=0;i<1000;i++){ array[i]=i; } 2) while(判断条件){ ... } 3) do { ... }while(判断条件); 用递归. 1!=1 2!=1!*2 3!=2!*3 4!=3!*4 以此类推 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); } } } 忘采纳 有问题 请追问 这个问题真要做的话是很难的。 下面是一个比较简单的算法,基本思想是先求素数表,再求质因子分解,最后求组合。 // 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;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; }先产生10个100以内的随机整数,然后利用子过程Factor对所产生的随机数分解质因子 VB编程
用C语言怎样做出分解质因数啊,请高手们帮个忙吧。
哪位大神能看出我的错误
java循环语句问题
C++ 编程
C语言 整除
c++/c语言因式分解