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()
{
    k=0;
    LL i,j;
    memset(prime, true, sizeof(prime));
    for(i=2; i<maxn; i++)
    {
        if(prime[i])
        {
            p[k++]=i;
            for(j=i*i; j<maxn; j+=i)
            {
                prime[j]=false;
            }
        }
    }
}
int num[1000];
int fac[maxn];
int cnt;
void fenjie(int m)
{
    memset(num, 0, sizeof(num));
    cnt=0;
    for(int i=0; p[i]*p[i]<=m&&i<k; i++)
    {
        if(m%p[i]==0)
        {
            fac[cnt]=p[i];
            while(m%p[i]==0)
            {
                num[cnt]++;
                m/=p[i];
            }
            cnt++;
        }
    }
    if(m>1)
    {
        fac[cnt]=m;
        num[cnt++]=1;
    }

}
int main()
{
    int t;
    isprime();

    scanf("%d",&t);
    while(t--)
    {
        int m;
        scanf("%d",&m);
        fenjie(m);
        //cout<<"cnt="<<cnt<<endl;
        for(int i=0; i<cnt-1; i++)
        {
           for(int j=0; j<num[i]; j++)
           {
            cout<<fac[i]<<"*";
           }
        }
       for(int i=0; i<num[cnt-1]-1; i++)
       cout<<fac[cnt-1]<<"*";

       cout<<fac[cnt-1]<<endl;
    }
    return 0;
}

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

时间: 2024-11-07 15:29:49

Foj 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

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

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+

FOJ 1075

#include<stdio.h> #include<iostream> using namespace std; int a[8000]={2,3}; int hash[80000]={0}; void func() { int i,j,k=2,flag; hash[2]=hash[3]=1; for(i=5;k<7100;i+=2) { flag=1; for(j=0;a[j]*a[j]<i;j++) { if(i%a[j]==0) { flag=0; break;

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