zoukankan      html  css  js  c++  java
  •      橙(ran )

    【题目背景】

    “蓝!慧音又给我布置数学题啦”手握试卷的橙急急忙忙地冲进屋内。

    “是吗?你有没有好好做啊?”蓝回过头来,九条尾巴甩动了一下,将灶台

    边的碗全扫了下去,顿时全被摔得四分五裂。

    “啊!呜呜呜。。。怎么办啊,紫又要骂我了。”

    由于蓝正焦灼于怎样跟紫解释,而橙又是一只智商只有小孩水平的妖怪猫,

    这种数学题她当然不会做了,所以她决定像你求助。

    【问题描述】

    具体的,慧音给了橙一个区间 [1,n] , 1 ,慧音想让橙求出能够整除这段区间每一

    个数的最小的数。

    【输入格式】

    输入一行一个正整数 n 。

    【输出格式】

    一行一个正整数,表示能整除这段区间的最小的数,答案对 100000007 取模。

    【样例 1 1 输入】

    7

    【样例 1 1 输出】

    420

    【样例 1 1 说明】

    420 是可以整除区间 1--7 , 1 每个数的最小的数。

    【子任务】

    7


    题解:求1--n的最小公倍数

    最小公倍数就是所有质数的相应幂的积
    比如N=10
    小于10的质数有2,3,5,7(如果N为7,则也为2 3 5 7)
    对应的最大幂是:3,2,1,1
    则最小公倍数是:2^3x3^2x5^1x7^ =2520

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define LL long long
    using namespace std;
    
    int n,cnt,check[2500005],prime[1565928];
    LL ans;
    
    void euler(int x){
        for(int i=2;i<=x;i++){
            if(!check[i]){
                prime[++cnt]=i;
                LL tmp=i;
                while(tmp*i<=x)tmp*=i;
                ans*=tmp;ans%=100000007;
            }
            for(int j=1;j<=cnt&&prime[j]*i<=x;j++){
                check[i*prime[j]]=true;
                if(i%prime[j]==0)break;
            }
        }
    }
    
    int main(){
        freopen("chen.in","r",stdin);
        freopen("chen.out","w",stdout);
        while(scanf("%d",&n)!=EOF){
            ans=1;cnt=0;
            memset(check,0,sizeof(check));
            memset(prime,0,sizeof(prime));
            euler(n);
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Linux下面rsync 实现 完全一致的同步方法
    [知乎]中国的对外援助
    Linux测试环境简单使用教程
    Java中的DeskTop类使用介绍
    Android应用加入微信分享
    Java中的面向接口编程
    Java泛型的好处
    Android studio 下JNI编程实例并生成so库
    在Android应用中使用Clean架构
    是时候学习Android分屏开发了
  • 原文地址:https://www.cnblogs.com/zzyh/p/7593577.html
Copyright © 2011-2022 走看看