找一找(斐波那契数列)
题目要求:给定n个正整数,请找出其中有多少个数x满足:在这n个数中存在数y,使y=kx,其中k为大于1的整数
输入描述 :第一行输入一个n,接下来一行输入n个正整数ai
输出描述:输出符合条件个数
示例:
输入 5 1 2 3 4 5 输出 2 说明 5个数中1和2符合条件,1是后面每个数的因子,2是4的因子 备注: 1≤n,ai≤1000000
<strong>解决1:<br /></strong>
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> using namespace std; const int N = 1000005; int cc[N]; bool can[N]; int getint() { char ch=getchar(); int res=0; while((ch<'0' || ch>'9') && ch!='-') ch=getchar(); bool neg=0; if(ch=='-') { neg=1; ch=getchar(); } while('0'<=ch && ch<='9') { res=res*10+ch-'0'; ch=getchar(); } if(neg) res=-res; return res; } int main() { int n,i,j; n=getint(); for(i=1;i<=n;i++) { int now=getint(); cc[now]++; } int ans=0; for(i=1;i<N;i++) { for(j=i+i;j<N;j+=i) { if(cc[j]) can[i]=1; } } for(i=1;i<N;i++) { if(can[i]) ans+=cc[i]; } cout<<ans<<endl; return 0; }
<strong>解决2:</strong>
#include<stdio.h> #include<algorithm> using namespace std; int a[1000001],b[2000001]; int main() { int n,i; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i]); b[a[i]]++; } int sum=0; sort(a,a+n); for(i=1;i<a[n-1];i++){ if(b[i]){ for(int j=2;i*j<=a[n-1];j++) if(b[i*j]) {sum+=b[i];break;} } } printf("%d\n",sum); }
<br /><br />
相关推荐
bizercsdn 2020-03-27
JakobHu 2020-01-03
llwang0 2019-12-28
GhostLWB 2019-12-14
qitong 2019-11-04
风吹夏天 2019-11-03
seekerhit 2019-10-20
Broadview 2019-06-27
风和日丽 2019-06-27
taiyangshenniao 2019-06-27
动态规划有时被称为递归的相反的技术。动态规划方案通常使用一个数组来建立一张表,用于存放被分解成众多子问题的解。当算法执行完毕,最终的解法将会在这个表中找到。今天我们先从我们最熟的斐波那契数列数列开始。
WindChaser 2019-06-21
hujun0 2013-03-19
HappyRocking 2019-05-16
HMHYY 2019-03-19
HeyShHeyou 2018-01-16
tingke 2015-08-09
天恒永恒 2017-01-12