64,631
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
void main(void)
{
int num = 1024; /* sample # */
int count = 2;
printf("\n %d = ",num);
while(num >= count)
{
if (!(num % count))
{
printf(" %d * ",count);
num = num / count;
}
else
{
count++;
}
}
printf("\b\b \n\n");
}
/*
author:Walf_GHOUL
实现功能:1.输入一个整数base,获得获得小于等于base的所有质数
2.将base分解成若干个质数相乘并输出
*/
#include <iostream>
#include <math.h>
using namespace std;
int* GetDivisor(int base); //获得小于等于base的所有质数
int GetFirstTrue(int i,bool* a ,int base); //获得第一个值为true的下表
int main()
{
int base = 2;
cout << "输入一个整数:";
cin >> base;
int* a = GetDivisor(base); //a存储质数表
cout << "分解结果为:";
if(base == a[base-1]) //如果输入的数是质数,输出
{
cout << base <<"="<<1<<'*'<<base<<endl;
}
else //如果不是质数,寻找质数因子
{
bool check = true;
int i = 1;
int temp = base;
cout << base << " = ";
while( temp > 1) // 若被除数为1,说明已经完全分解了 {
if(a[i] > 0 && (temp % a[i]) == 0) //如果该质数是因子输出
{
cout << a[i];
if(a[i] != temp)
{
cout<<"*";
}
temp = temp / a[i]; //改变被除数,从2开始重新寻找因子
i = 1;
}
else
{
i++;
}
}
}
delete[] a;
return 0;
}
int GetFirstTrue(int i,bool* a ,int base)
{
for(int j = i+1;j<base;j++)
{
if(a[j] == true)
return j;
}
return 0;
}
int* GetDivisor(int base)
{
int* a = new int[base];
bool* flag = new bool[base];
int i,j;
for(i = 0 ; i < base ; i++)
{
a[i] = i+1;
flag[i] = true;
}
for( i = 0; i< base;i++)
{
j = GetFirstTrue(i,flag,base);
if(j!=0)
{
for( int k = j+1; k < base ; k++)
{
if(a[k] % a[j] == 0)
{
flag[k] = false;
a[k] = 0;
}
}
}
}
delete[] flag;
return a;
}
/*
author:Walf_GHOUL
实现功能:1.输入一个整数base,获得获得小于等于base的所有质数
2.将base分解成若干个质数相乘并输出
*/
#include <iostream>
#include <math.h>
using namespace std;
int* GetDivisor(int base); //获得小于等于base的所有质数
int GetFirstTrue(int i,bool* a ,int base); //获得第一个值为true的下表
int main()
{
int base = 2;
cout << "输入一个整数:";
cin >> base;
int* a = GetDivisor(base); //a存储质数表
cout << "分解结果为:";
if(base == a[base-1]) //如果输入的数是质数,输出
{
cout << base <<"="<<1<<'*'<<base<<endl;
}
else //如果不是质数,寻找质数因子
{
bool check = true;
int i = 1;
int temp = base;
cout << base << " = ";
for( int j = 0 ;j<base;j++)
{
if(a[i] > 0 && (temp % a[i]) == 0) //如果该质数是因子输出
{
cout << a[i];
if(a[i] != temp)
{
cout<<"*";
}
temp = temp / a[i]; //改变被除数,从2开始重新寻找因子
i = 1;
}
else
{
i++;
}
}
}
delete[] a;
return 0;
}
int GetFirstTrue(int i,bool* a ,int base)
{
for(int j = i+1;j<base;j++)
{
if(a[j] == true)
return j;
}
return 0;
}
int* GetDivisor(int base)
{
int* a = new int[base];
bool* flag = new bool[base];
int i,j;
for(i = 0 ; i < base ; i++)
{
a[i] = i+1;
flag[i] = true;
}
for( i = 0; i< base;i++)
{
j = GetFirstTrue(i,flag,base);
if(j!=0)
{
for( int k = j+1; k < base ; k++)
{
if(a[k] % a[j] == 0)
{
flag[k] = false;
a[k] = 0;
}
}
}
}
delete[] flag;
return a;
}