找一找(斐波那契數列)
阿新 • • 發佈:2018-02-03
數列 || amp question 滿足 mil 一個 輸出 family
題目要求:給定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
解決1:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> usingnamespace 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; }
解決2:
#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); }
找一找(斐波那契數列)