or2?Scum!(周期性求解)

本文介绍了一种算法,用于判断一个正整数是否为Or2数(即能否被2、3、5或7整除),并计算其在所有Or2数中的排名。通过分析数的周期性规律,实现了一个高效解决方案。

链接:https://ac.nowcoder.com/acm/contest/316/E
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

当一个正整数能被2或者3或者5或者7整除,我们定义这个数为or2数 给定正整数 ,
求问这个数是否是or2数,如果是,则输出他是第几大的or2数,否则输出Scum

输入描述:

多组数据(不超过1e5组,读到文件结束)

每组数据一行:一个正整数x(1≤x≤1e18)

输出描述:

对于每个输入,输出一行。
如果是or2数,输出or2 c,表示它是第c大的or2数 否则输出字符串Scum

示例1

输入

复制

2
4
11

输出

复制

or2 1
or2 3
Scum

 

题解:周期性规律,细节在代码

 

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
 
using namespace std;
int prime[1000005];
bool vis[1000005];
 
 
 
int main()
{
    long long int n;
    int sum=0;
    for(int t=1;t<=210;t++)
    {
        if(t%2==0||t%3==0||t%5==0||t%7==0)
        {
            sum++;
        }
    }
 
    while(scanf("%lld",&n)!=EOF)
    {
        int s=n%210;
        int s1=0;
        for(int t=1;t<=s;t++ )
        {
        if(t%2==0||t%3==0||t%5==0||t%7==0)
        {
            s1++;
        }
        }
        if(n%2==0||n%3==0||n%5==0||n%7==0)
        printf("or2 %lld\n",n/210*sum+s1);
        else
        {
            printf("Scum\n");
        }
    }
     
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

black-hole6

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值