fzu 1075 分解素因子

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

int prime(int n)
{
    if(n==2||n==3)
    {
        return 1;
    }
    if(n%6!=1&&n%6!=5)
        return 0;
    for(int i=5; i*i<=n; i+=6)
    {
        if(n%i==0||n%(i+2)==0)
            return 0;
    }
    return 1;
}

int main()
{
    int n;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        if(n==1)
        {
            printf("1\n");
            continue;
        }
        if(prime(n)==1)
        {
            printf("%d\n",n);
            continue;
        }
        int N=n;
        int k=0;
        int cnt=0;
        //printf("%d=",n);
        for(int i=2; i*i<=n; i++)
        {
            while(N%i==0)
            {
                N=N/i;
                if(cnt>0)
                    printf("*");
                printf("%d",i);
                cnt++;
            }
            if(N==1)
                break;
            if(prime(N))
            {
                printf("*%d",N);
                break;
            }
        }
        printf("\n");
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-26 12:30:22

fzu 1075 分解素因子的相关文章

FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】

[唯一分解定理]:https://www.cnblogs.com/mjtcn/p/6743624.html 假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个程序,将x分解为若干个素数的乘积. Input 输入的第一行含一个正整数k (1<=k<=10),表示测试例的个数,后面紧接着k行,每行对应一个测试例,包含一个正整数x. Output 每个测试例对应一行输出,输出x的素数乘积表示式,式中的素数从小到大排列,两个素数之间用“*”表示乘法. Samp

Foj 1075 分解素因子

题目链接:http://acm.fzu.edu.cn/problem.php?pid=1075 思路:分解素因子 #include <iostream> #include <cstring> #include <cstdio> using namespace std; const int maxn=65535+5; typedef long long LL; bool prime[maxn]; int p[maxn/10]; int k; void isprime()

LightOJ 1340 - Story of Tomisu Ghost 阶乘分解素因子

http://www.lightoj.com/volume_showproblem.php?problem=1340 题意:问n!在b进制下至少有t个后缀零,求最大的b. 思路:很容易想到一个数通过分解素因子可以得到最大的指数.那么问题关键在于求得n!的素因子的指数,找到指数大于t的所有素因子,再将那些指数除去t,剩下的数就是最大的b了.分解阶乘时,对n不断除素数p,直到n为0时,此时商的和即该素因子的指数. /** @Date : 2016-11-30-19.35 * @Author : Lw

【小方法--最简】C - 分解素因子

C - 分解素因子Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:10240KB     64bit IO Format:%lld & %llu Submit Status    Description 假设x是一个正整数,它的值不超过65535(即1< x < =65535),请编写一个程序, 将x分解为若干个素数的乘积.    Input 输入的第一行含一个正整数k (1<=k

hdu 1299 数论 分解素因子

题意:求1.1/x+1/y=1/z 给定z 求x,y的个数zsd:1: 要知道这个素数的因子的范围 范围为2--sqrt(n);2: 带入方程得:x = n * n / k + n ; 现在就变成了求x的值.又因为n一定大于k,所以转换成求n * n的分解数: 因为n = p1 ^ e1 * p2 ^ e2 *..........*pn ^ en sum ( n)= ( 1 + e1 ) * ( 1 +e2 ) * .........* ( 1 +en ); sum (n * n) = ( 1

N!分解素因子及若干问题【转载】

这里写的非常好http://www.cnblogs.com/openorz/archive/2011/11/14/2248992.html,感谢博主,我这里就直接用了. 将N!表示成 N! = p1^t1*p2^t2*-pi^ti-*pk^tk(其中p1,p2--pk是素数,1<N<= 10^6) 显然很容易通过素数筛选求出pi,因为1<pi<=N,关键是如何快速地求出ti. 我们先来看一下对于2这个素因子,把N!分成两部分,即奇偶两部分 假设N是偶数 N! =1*2*3*4*5-

hdu-1299 Diophantus of Alexandria(分解素因子)

思路: 因为x,y必须要大与n,那么将y设为(n+k);那么根据等式可求的x=(n2)/k+n;因为y为整数所以k要整除n*n; 那么符合上面等式的x,y的个数就变为求能被n*n整除的数k的个数,且k>=n; 那么k就在n到n*n之间,不过这样不则么好求. 因为x,y具有对称性,从y=(n+k)和x=(n2)/k+n;也可以看出(n*n/k,和k等价因为k*(n*n/k)=n*n): 由于任何数都可以拆成素数的乘积,形式为a1^x1*a2^x2*a3*^x3......; 那么因数的个数为(1+

light oj 1236 【大数分解】

给定一个大数,分解质因数,每个质因子的个数为e1,e2,e3,--em, 则结果为((1+2*e1)*(1+2*e2)--(1+2*em)+1)/2. //light oj 1236 大数分解素因子 #include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #include <math.h> #include <ctype.h> #i

HDU 5428 The Factor 分解因式

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5428 The Factor Accepts: 101 Submissions: 811 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 有一个数列,FancyCoder沉迷于研究这个数列的乘积相关问题,但是它们的乘积往往非常大.幸运的是,FancyCoder只需要找到这个巨大