您的位置:首页 > 其它

tsinsen A1036. 分解质因数

2016-04-19 22:39 232 查看
学了c++忘了c,会用stl却忘了自己写数据结构……
4000
复习一下最基本的单链表。

题目:

【问题描述】

求出区间[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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: