100以内质因数分解代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct arr{
int a;
struct arr *next;
}node;
int main()
{
void Choose(int n);
int Scanf();
int n=Scanf(),i=0;
while(n==1||n==2){
if(i==0)
Choose(n);
else{
n=Scanf();
Choose(n);
}
i=1;
}
printf("谢谢使用\n");
return 0;
}
void GCD(int n)
{
node *Factor(node *h,int n);
node *head;
head=(node *)malloc(sizeof(node));
head=Factor(head,n);
printf("数字");
printf("%d",n);
printf("可以因式分解为:\n");
while(head->next!=NULL){
printf("%d",head->next->a);
if(head->next->next!=NULL)
printf("x");
head=head->next;
}
printf("\n");
}
void GCD(int n,int m)
{
node *insert(node *a,int i);
node *dele(node *head,node *a);
node *Factor(node *h,int n);
node *head1,*head2,*s,*t;
head1=(node *)malloc(sizeof(node));
head2=(node *)malloc(sizeof(node));
s=head1;t=head2;
int add_arr[100];
int k=0;
head1=Factor(head1,n);
head2=Factor(head2,m);
node *p=head1,*q;
while(p->next!=NULL){
q=head2;
while(q->next!=NULL){
if(p->next->a==q->next->a){
add_arr[k++]=p->next->a;
p=dele(head1,p->next);
q=dele(head2,q->next);
}
else
q=q->next;
}
if(p->next!=NULL)
p=dele(head1,p->next);
else
break;
}
for(int i=1;i<k;i++)
add_arr[i]*=add_arr[i-1];
if(add_arr[0]>0){
printf("公因数为:");
printf("%d\n",add_arr[k-1]);
}
else
printf("无公因数\n");
}
node *Factor(node *h,int n)
{
node *insert(node *a,int i);
node *s=h;
while(n%3==0||n%2==0||n%5==0||n%7==0){
if(n%3==0){
s=insert(s,3);
n/=3;
}
if(n%2==0){
s=insert(s,2);
n/=2;
}
if(n%5==0){
s=insert(s,5);
n/=5;
}
if(n%7==0){
s=insert(s,7);
n/=7;
}
}
s=insert(s,n);
return h;
}
node *insert(node *a,int i)
{
node *q;
q=(node *)malloc(sizeof(node));
a->next=q;
q->next=NULL;
q->a=i;
return q;
}
node *dele(node *head,node *a)
{
node *b=head;
while(b->next!=a)
b=b->next;
b->next=a->next;
free(a);
return b;
}
int Scanf()
{
int i;
printf("请输入执行功能:\n");
printf("1、因数分解\n");
printf("2、提取公因数\n");
printf("3、结束程序\n");
scanf("%d",&i);
return i;
}
void Choose(int n)
{
void GCD(int n,int m);
void GCD(int n);
switch(n){
case 1:{
int temp;
printf("请输入待分解数:\n");
scanf("%d",&temp);
GCD(temp);
break;
}
case 2:{
int temp_1,temp_2;
printf("请输入待提取数:\n");
scanf("%d%d",&temp_1,&temp_2);
GCD(temp_1,temp_2);
break;
}
}
}