• B


    Alexandra has a little brother. He is new to programming. One day he is solving the following problem: Given an positive integer N, judge whether N is prime. The problem above is quite easy, so Alexandra gave him a new task: Given a positive integer N, find the minimal positive integer M, such that N/M is prime. If such M doesn't exist, output 0. Help him!
     

    Input

    There are multiple test cases (no more than 1,000). Each case contains only one positive integer N. $N leq 1,000,000,000$. Number of cases with $N > 1,000,000$ is no more than 100.
     

    Output

    For each case, output the requested M, or output 0 if no solution exists.
     

    Sample Input

    3 4 5 6
     

    Sample Output

    1 2 1 2
     
    这个题呢,我很纠结,因为理解错题了,首题目让找一个 最小的数使n/m,必须能被整除,而且使n/m的值是个素数。
    当时我呢,没有找必须被整除的数,一直,时间超限,而且答案是错误的。
     
    结果我问了我的师傅,才知道那儿错了。首先任何一个大于1的数x,都能写成x=a1^(n1)×a2^(n2)×a3^(n3)×……×an^(nn);
    这里a1,a2,a3,……,an,都是奇数。
    比如当n=450;那么n=2×3×3×5×5;只能保留到最后一个,最大的,素数,
    即m=n/5;
     
    所以,
    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int fun(int n)
    {
    int i,j=0,k;
    k=n;
    for(i=2;i<=sqrt(n);i++)   //不能用i<=n因为会超时
    {
    while(k%i==0)
    {
    k=k/i;
    j=max(j,i);
    }
    }
    j=max(j,k);  //   比如当n=10时
    if(n==1)printf("0 ");
    else
    {
    printf("%d ",j==0?1:n/j);
    }
     
    }
     
     
    int main()
    {
    int n;
    while(scanf("%d",&n)!=EOF)
    {
    fun(n);
     
    }
    return 0;
    }
     
     
     
     
     
     
  • 相关阅读:
    linux内存的使用与page buffer (转)
    基于linux2.6.38.8内核的SDIO/wifi驱动分析(转)
    RamDisk块设备驱动实例开发讲解一
    Linux加密框架设计与实现(转)
    v4l2子系统学习心得
    一句memset引发的疑案
    linux 信号量之SIGNAL 0(转)
    可重入函数
    从ARM VIVT看linux的cache 处理
    内核抢占与preempt_count
  • 原文地址:https://www.cnblogs.com/woyaocheng/p/4548231.html
Copyright © 2020-2023  润新知