• P1820 【寻找AP数】


    超级题目链接

    这题程序实现其实并不难,难的是数学的思想及证明,这在真正的比赛考场上其实是不容易想到的

    去年的年赛题目也是在往更难的数学思想上靠拢,并不是一味的编程,需要一定的数学基础

    这个。。数学性质我再提一下吧,有兴趣的可以自己尝试证一下~~

    _性质一_

    一个AP数分解质因数后,它的因子必为连续质数

    _性质二_

    一个AP数分解质因数后,因子越小,指数越大

    实际上,我觉得这两个数学性质都蛮好想的,个人感觉不用看证明。

    另外,编程时注意以下几点:

    1)一个AP数的质因子数不会超过10,不然大于数据范围

    2)用long long型变量存储答案,不然会爆

    3)指数递减

    代码:

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<algorithm>
     6 using namespace std;
     7 long long n,ap,fap;//ap是要输出的答案,fap是答案的质因子数
     8 int mm[]={2,3,5,7,11,13,17,19,23,29};//可能的质因子
     9 void dfs(long long num,int fnum,int i,int j){
    10     if(fap<fnum||(fap==fnum&&ap>num)){//更改输出答案的条件
    11         fap=fnum;
    12         ap=num;
    13     }
    14     int t=1;
    15     while(t<=j&&num*mm[i]<=n){//直接判断
    16         num*=mm[i];
    17         dfs(num,fnum*(t+1),i+1,t);
    18         t++;
    19     }
    20     return;
    21 } 
    22 int main(){
    23     while(scanf("%d",&n)!=EOF){//多组数据
    24         ap=fap=0;//赋初值,不然会错的很惨
    25         dfs(1,1,0,20);
    26         cout<<ap<<endl;
    27     }
    28     return 0;
    29 }

    呐呐,就是这样了哦,新人博客,多多支持一下吧,嘻嘻~~~

  • 相关阅读:
    oracle课堂笔记---第十九天
    oracle课堂笔记--第十八天
    oracle课堂随笔--第十七天
    oracle课堂随笔--第十六天
    oracle课堂随笔--第十五天
    oracle课堂随笔--第十四天
    oracle课堂笔记--第十三天
    oracle课堂随笔--第十一天
    Beta冲刺预备
    个人作业——软件产品分析
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11122033.html
Copyright © 2020-2023  润新知