素因数分解
素因数分解するプログラム作ってみました。
#include<stdio.h> #include<stdlib.h> int main(void) { int i,j,k,n,m,l,x,re; int *primen,*remain,*factor; k = 0; printf("数字を入力してください:"); scanf("%d",&x); if(x==1){ printf("1は素因数分解できません。\n"); return 0; } l = x; primen = (int *)calloc(x+1,sizeof(int)); remain = (int *)malloc(sizeof(int)*x); factor = (int *)calloc(x,sizeof(int)); for(i=0 ; i<x ; i++){ remain[i] = 1; } do{ for(i=0 ; i<=l ; i++){ primen[i]=0; } primen[0] = 2; for(i=3 ; i<=l ; i++){ for(j=0 ; primen[j]>0 ; j++){ remain[j] = i % primen[j]; } m = 0; for(n=0 ; n<j ; n++){ if(remain[n]==0){ m = 1; } } if(m==0){ primen[j]=i; } } for(i=0 ; primen[i]>0 ; i++){ re = l % primen[i]; if(re==0){ l = l / primen[i]; factor[k] = primen[i]; k++; break; } } }while(primen[1]>0); free(remain); free(primen); printf("%dを素因数分解すると:\n",x); for(i=0 ; i<k ; i++){ printf("%d ",factor[i]); } if(l!=1){ printf("%d\n",l); }else{ printf("\n"); } free(factor); return 0; }