P1820 【寻找AP数】

超级题目连接ios

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

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

这个。。数学性质我再提一下吧,有兴趣的能够本身尝试证一下~~code

_性质一_blog

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

_性质二_博客

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

实际上,我以为这两个数学性质都蛮好想的,我的感受不用看证实。string

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

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 }

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

相关文章
相关标签/搜索