or2?Scum!(周期性求解)

链接: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/210*sum+s1);
        else
        {
            printf("Scum
");
        }
    }
     
}
原文地址:https://www.cnblogs.com/Staceyacm/p/10781988.html