1. 程式人生 > >找一找(斐波那契數列)

找一找(斐波那契數列)

數列 || 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>
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; }
解決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);
}

找一找(斐波那契數列)