답안 #15341

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
15341 2015-07-12T06:21:53 Z myungwoo 피보나미얼 (kriii3_V) C++14
32 / 74
1121 ms 1092 KB
#include<stdio.h>
#include<algorithm>

using namespace std;

typedef long long ll;

const int MX = 1000;

int M;
ll DB[MX+5];

ll mul(ll A, ll B, ll M)
{
    if( M < 1ll<<31 ) return A*B%M;
    if( !B ) return 0;
    else return (mul((A<<10)%M, B>>10, M) + A*(B&((1<<10)-1)) )%M;
}

struct mat{
    ll t[2][2];
    mat operator*(const mat &l)const{
        mat ans;
        for(int i = 0; i <2; i++){
            for(int j = 0; j < 2; j++){
                ans.t[i][j] = 0;
                for(int k = 0; k < 2; k++){
                    ans.t[i][j] += mul(t[i][k], l.t[k][j], M);
                }
                ans.t[i][j] %= M;
            }
        }
        return ans;
    }
};

int get(int N, ll P)
{
    M = P;
    mat mul = {1, 1, 1, 0}, ans = {1, 0, 0, 1};
    while(N){
        if(N%2) ans = ans * mul;
        mul = mul * mul, N /= 2;
    }
    return ans.t[1][0];
}

int main()
{
    int N, P;
    scanf("%d%d", &N, &P);
    for(int i = 2; i <= P; i++){
        if(DB[i])continue;
        ll wi = 0, lst = 0, ans = 0, step = 1, lv = i;
        while(wi+step <= N){
            wi += step;
            if( get(wi, lv) == 0 ){
                step = wi; wi = 0;
                ans += N / step;
                lv *= i;
            }
            if( lv >= 1ll << 40 ) printf("%d %lld\n", i, lv);
        }
        for(int j = i; j <= P; j += i) DB[j] = ans;
    }
    for(int i = 2; i <= P; i++){
        ll ans = 0x7fffffff;
        for(int j = 2; j <= i; j++){
            int cnt = 0, su = i;
            while(su%j == 0){
                su /= j;
                cnt++;
            }
            if( cnt ) ans = min(ans, DB[j] / cnt);
        }
        printf("%lld\n", ans);
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 1092 KB Output is correct
2 Correct 15 ms 1092 KB Output is correct
3 Correct 15 ms 1092 KB Output is correct
4 Correct 16 ms 1092 KB Output is correct
5 Correct 15 ms 1092 KB Output is correct
6 Correct 16 ms 1092 KB Output is correct
7 Correct 68 ms 1092 KB Output is correct
8 Correct 92 ms 1092 KB Output is correct
9 Correct 112 ms 1092 KB Output is correct
10 Correct 112 ms 1092 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 109 ms 1092 KB Output is correct
2 Correct 154 ms 1092 KB Output is correct
3 Correct 128 ms 1092 KB Output is correct
4 Correct 146 ms 1092 KB Output is correct
5 Correct 179 ms 1092 KB Output is correct
6 Correct 548 ms 1092 KB Output is correct
7 Correct 564 ms 1092 KB Output is correct
8 Incorrect 1121 ms 1092 KB Output isn't correct
9 Halted 0 ms 0 KB -