最近老是遇到质因数分解的题目,发现了几种方法,大家可以一起看看

质因数分解

对于给定的正整数n,输出n的素因数的乘式。

输入格式:

输入一个正整数n,要求1

输出格式:

输出n的素因数的乘式,要求这些素因数呈非递减排列。

输入样例1:

102

输出样例1:

2*3*17

输入样例2:

980

输出样例2:

2*2*5*7*7

 第一种

#include
int main()
{
    int n;
    scanf("%d",&n);
    int i;
    for(i=2;i

 第二种

           for(c=2;c

 第三种

#include
int main()
{
    int n,i;
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2;i<=n;i++)      
    {
        while(n!=i)              /*for里边的while,保证重复的i了*/
        {
            if(n%i==0)            
            {                    
                printf("%d*",i);
                n=n/i;
            }
            else
                break;          /*这个方法与第二种很类似*/
        }
    } 
    printf("%d",n);
    return 0;
}

 看一个完整的题目

求出区间[a,b]中所有整数的质因数分解,2<=a<=b<=10000。

输入格式:

输入两个整数a,b。

输出格式:

每行输出一个数的分解,形如k=a1a2a3...(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
#include
#include
int isPrime(int n)                /*这个是判断是否是素数*/
{
    if(n==1) return 1;
    if(n==2) return 1;
    int i;
    for(i = 2; i <= (int)sqrt(n)+1; i ++)
        if(n%i == 0) return 0;
    return 1;
}
int main()
{
    int a,b,c,n;
    scanf("%d %d",&a,&b);
    int i;
    for(i=a;i<=b;i++)
    {
        if(isPrime(i))
            printf("%d=%d\n",i,i);
        else
        {
            printf("%d=",i);    /*这里的分解用以上三种哪种都可以*/
            n=i;
            for(c=2;c

 

你可能感兴趣的:(算法,c#)