学了c++忘了c,会用stl却忘了自己写数据结构……复习一下最基本的单链表。
题目:
【问题描述】
求出区间[a,b]中所有整数的质因数分解。
【输入格式】
输入两个整数a,b。
【输出格式】
每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
【样例输入】
3 10
【样例输出】
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
【提示】
先筛出所有素数,然后再分解。
【数据范围】
2<=a<=b<=10000
话不多说上代码。
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
bool isprime(int n)
{
int i, max = (int)sqrt(n);
if(n == 2 || n == 3 || n == 5) return true; //n == 2 or 3 or 5
if(n == 1 || !(n % 2) || !(n % 3) || !(n % 5)) return false; //n == 1或n被2、3、5中任一个整除
for(i = 7; i <= max + 1; i++)
{
if(!(n % i)) return false;
}
return true;
}
struct PRIME
{
int a;
PRIME *next;
};
PRIME* create(int val)
{
PRIME *p = NULL;
p = (PRIME*)malloc(sizeof(PRIME));
p->a = val;
p->next = NULL;
return p;
}
int main()
{
int i, a, b, temp;
scanf("%d%d", &a, &b);
PRIME *head = create(2);
PRIME *p = head;
for(i = 3; i <= b; i++)
{
if(isprime(i))
{
p->next = create(i);
p = p->next;
}
}
for(i = a; i <= b; i++)
{
printf("%d=", i);
temp = i;
for(p = head; p != NULL; p = p->next)
{
while(temp % p->a == 0)
{
printf("%d", p->a);
temp /= p->a;
if(temp != 1) printf("*");
else break;
}
}
printf("\n");
}
return 0;
}